【问题标题】:Cant use dash(-) in value in mysql table [duplicate]不能在mysql表中的值中使用破折号(-)[重复]
【发布时间】:2020-08-02 22:12:33
【问题描述】:

我一直在尝试从 python 向 MYSQL 表中插入数据。我的sql表中的字段是id、token、start_time、end_time、no_of_trans。 我想将使用uuid4 生成的令牌存储在令牌列中。但由于该值包含(-),我收到此错误: 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    |                |
+-------------+--------------+------+-----+---------+----------------+

【问题讨论】:

  • 字符串文字必须用单引号字符 ' 括起来。
  • 什么是INSERT INTO 生成(12, start_time, end_time ...
  • @Akina 我认为这里的问题是 Python UUID。我不确定语句 API 是否足够聪明,无法弄清楚如何绑定它。
  • 我认为您要查找的语法是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)) 注意,,而不是%
  • 查看@Nick 发表的评论。如果您打算像当前一样使用% 运算符进行字符串格式化,那么您需要用引号将对应于字符串值的每个%s 括起来,即VALUES ('%s', '%s', '%s', %s)。但是当输入是“来自外部”时防止 SQL 注入攻击的准备好的语句是要走的路。

标签: mysql mariadb mysql-python mysql-connector


【解决方案1】:

在传递字符串时,VALUES 部分中除了最后一个 %s 之外的所有内容都需要用单引号引起来。例如没有引号的 2020-04-20 变为 1996。

但实际问题似乎是第一个未加引号的 %s,因此您的 rand_token 变量值被解释为

3900af75 - 4563 - 4c05 - 81ba - b0f1630abecc

所以“列 3900af75 的值减去文字数 4563 减去名称为 4c05 的列 ...”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    相关资源
    最近更新 更多