此问题在此处已有答案:
How to use variables in SQL statement in Python?(5个答案)
两年前关闭了。
我一直在尝试从python向MYSQL表中插入数据。我的SQL表中的字段是id,token,start_time,end_time和no_of_trans.我想在token列中存储使用uuid4
生成的token。但是由于值包含(-)
,我得到了这个错误:mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column '3900af75' in 'field list''
其中生成的令牌为:3900af75-4563-4c05-81ba-b0f1630abecc
我也尝试过以字符串格式插入日期,但也不起作用。所以我显式地将日期值作为字符串传递:mycursor.execute("""INSERT INTO generate (token, start_time, end_time, no_of_trans) VALUES (%s, %s, %s, %s)""" %(rand_token, '2020-04-20', '2020-04-20', 3))
它将数据插入表中,但日期被视为整数,存储的值是1996
,它只不过是我传递的日期的2020-04
。
下面是我的表的截图:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| token | varchar(255) | YES | | NULL | |
| start_time | varchar(255) | YES | | NULL | |
| end_time | varchar(255) | YES | | NULL | |
| no_of_trans | int(20) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
1条答案
按热度按时间rkue9o1l1#
在传递字符串时,VALUES部分中除了最后一个%s之外的所有字符都需要用单引号括起来。例如,如果没有引号,2020-04-20就变成了1996。
但实际的问题似乎是第一个未加引号的%s,这样您的兰德_token变量值就被解释为
3900af75 - 4563 - 4c05 - 81ba - b0f1630abecc
所以“列3900 af 75的值减去文字数4563减去名称为4c 05的列...”