Python 数据溢出到另一列
我正在尝试在Discord bot中使用sqlalchlemy来记录员工和用户之间的对话 大多数情况下都会记录一些内容,但最近在将数据插入表时遇到了一些问题 我们正在使用sqlalchemy插入数据库。我不是专家,所以可能是做得不对 以下是表对象: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
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
列。为什么你认为有任何类型的“溢出”?错误消息和您提供的代码清楚地表明您尝试插入到标记
列中的值太长(如回答中所指出的)。问题是:在哪里为标记分配值?错误发生在那里吗?