0

我在 Python 中执行一些 MySQL 语句时遇到了 2 个问题。首先,我有一个日期列,我手动插入了其他记录,格式为 YYYY-MM-DD(例如 2016-03-15)。但是,某处的格式存在问题,我尝试使用 strftime 等进行各种不同的格式组合。

我引用了 Inserting a Python datetime.datetime object into MySQL,但这没有帮助。

import time 
formattedTime = datetime.datetime(3000, 12, 03)
formattedTime = formattedTime.date().isoformat()
a = 1
b = 2
c = 4
cursor.execute("INSERT INTO nodeStatistics VALUES(%s, %d, %d, %d, NULL, NULL, NULL, NULL, NULL, NULL, 'item1 item2 item3')" %(formattedTime, a, b, c))
cnx.commit()

日期字段,是我的主键。我收到提示 0000-00-00 的 NULL 条目的错误(这是输入 NULL 时的默认值),所以我知道“formattedTime”和相应的“%s”失败:mysql.connector.errors。 IntegrityError:1062(23000):密钥“PRIMARY”的重复条目“0000-00-00”

其次,我有一个列表,listWords = list(),在我的数据库中我已经将相应的类型设置为longtext。我在我的程序执行期间附加项目,最后我 ' '.join(listWords) 将列表转换为空格分隔的字符串,但是当我将上面的内容替换为:

cursor.execute("INSERT INTO nodeStatistics VALUES(%s, %d, %d, %d, NULL, NULL, NULL, NULL, NULL, NULL, %s)" %(formattedTime, a, b, c, listWords))

我得到错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“item1 item2 item 3”附近使用正确的语法

任何帮助将不胜感激!

4

1 回答 1

0

不得对 SQL 查询使用字符串插值。而是使用参数替换,这对于 MySQL 总是使用%s但处理方式不同;并用逗号与值隔开,而不是用%s.

cursor.execute("INSERT INTO nodeStatistics VALUES(%s, %s, %s, %s, NULL, NULL, NULL, NULL, NULL, NULL, 'item1 item2 item3')", (formattedTime, a, b, c))
于 2016-04-19T09:33:13.510 回答