Python 数据溢出到另一列

Python 数据溢出到另一列,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我正在尝试在Discord bot中使用sqlalchlemy来记录员工和用户之间的对话 大多数情况下都会记录一些内容,但最近在将数据插入表时遇到了一些问题 我们正在使用sqlalchemy插入数据库。我不是专家,所以可能是做得不对 以下是表对象: engine=create_引擎(“mysql+pymysql://%s:%s@%s/%s”%(db_用户、db_密码、db_主机、数据库),echo=True) meta=元数据() 日志=表格( “日志”,元, 列('id',Integer,pr

我正在尝试在Discord bot中使用sqlalchlemy来记录员工和用户之间的对话

大多数情况下都会记录一些内容,但最近在将数据插入表时遇到了一些问题

我们正在使用sqlalchemy插入数据库。我不是专家,所以可能是做得不对

以下是表对象:

engine=create_引擎(“mysql+pymysql://%s:%s@%s/%s”%(db_用户、db_密码、db_主机、数据库),echo=True)
meta=元数据()
日志=表格(
“日志”,元,
列('id',Integer,primary_key=True,autoincrement=True,nullable=False),
列('agent',VARCHAR(45),null=False),
列('starttime',DATETIME,nullable=False),
列('endtime',DATETIME,nullable=False),
列('osid',VARCHAR(20),null=True),
列('昵称',VARCHAR(45),nullable=False),
列('discorduid',VARCHAR(30),nullable=False),
列('log',字符串(99999999999999999999999999999999999999),可空=False),
列('tags',VARCHAR(45),null=True)
)
insert=logs.insert()
insert=logs.insert().values(agent=agent,starttime=start,endtime=end,osid='',昵称=user,discorduid=uid,log=messages,tags=tags)
连接=引擎。连接()
结果=连接。执行(插入)
以下是有关数据库中表的信息:

MariaDB [discord]> describe logs;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| agent      | varchar(45) | NO   |     | NULL    |                |
| starttime  | datetime    | NO   |     | NULL    |                |
| endtime    | datetime    | NO   |     | NULL    |                |
| osid       | varchar(20) | YES  |     | NULL    |                |
| nickname   | varchar(45) | NO   |     | NULL    |                |
| discorduid | varchar(30) | NO   |     | NULL    |                |
| log        | longtext    | NO   |     | NULL    |                |
| tags       | varchar(45) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
我收到的错误似乎表明,日志的列
log=messages
通过
insert=logs.insert()。值(agent=agent,starttime=start,endtime=end,osid='',昵称=user,discorduid=uid,log=messages,tags=tags)
溢出到下面我的
tags
列中,并编辑了一些数据:

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: DataError: (pymysql.err.DataError) (1406, "Data too long for column 'tags' at row 1")
[SQL: INSERT INTO logs (agent, starttime, endtime, osid, nickname, discorduid, log, tags) VALUES (%(agent)s, %(starttime)s, %(endtime)s, %(osid)s, %(nickname)s, %(discorduid)s, %(log)s, %(tags)s)]
[parameters: {'agent': 'X', 'starttime': datetime.datetime(2021, 5, 26, 19, 50, 55, 863000), 'endtime': datetime.datetime(2021, 5, 26, 20, 39, 56, 392000), 'osid': '', 'nickname': 'X', 'discorduid': 'X', 'log': 'OffSec Ninja:\nHello X - this chat has been initiated by X so that we can better assist you.\n\nX:\nHi X how are yo ... (5500 characters truncated) ... com/attachments/847200149520515102/847212337203380234/somefile.PNG\n\n\X:\nthe last buffer is the one that I\'m changing from 5092 to 5098\n\n', 'tags': "last buffer is the one that I'm changing from 5092 to 5098"}]
当支持代理关闭专用1对1频道时,
tags
列将被填充

我检查了插入的
消息的长度,结果是5462


这是否是mysql的一个限制,以及它可以在一行中存储多少数据?还是我刚刚搞乱了我的表对象?

导致此错误的原因是SQL试图将58个字符的字符串“最后一个缓冲区是我正在从5092更改为5098的缓冲区”插入
VARCHAR(45)
。太长了


我从未听说过MySQL让文本内容在列之间溢出。它只是不能做到这一点。因此,在代码尝试将Python变量
消息
标记
插入表之前,它们必须包含在erro中看到的文本。调试这些Python变量的设置方式。

我的
日志
列中的数据溢出到
标记
列中。我不想增加标签的大小,因为我需要的数据属于
logs
列。为什么你认为有任何类型的“溢出”?错误消息和您提供的代码清楚地表明您尝试插入到
标记
列中的值太长(如回答中所指出的)。问题是:在哪里为
标记分配值?错误发生在那里吗?