我最近在python中使用postgreSQL数据库编写代码,它看起来如下:
def insert(table, ID, date, timestamp):
cur.execute("""INSERT INTO %s (ID, date, timest)
VALUES (%s, %s, %s);""",
(AsIs(table), ID, AsIs(date), AsIs(timestamp)))
这似乎适用于postgreSQL,但是当我在mySQL服务器上尝试相同的事情时,它不起作用。有没有人知道为什么?我认为这可能与%s字符有关,因为如果我在表格,ID,日期和时间戳的值中进行硬编码,它就会起作用。
此外,它给我以下错误:
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''master'' at line 2")
'master'是我用作变量的表的名称,我还注意到master周围有两个单引号(如:''master''),其中只有一个。那么这也可能是一个问题?
无论如何,谢谢你的帮助!
答案 0 :(得分:2)
这在PostgreSQL中也不行。表名不应该是参数化的。
cur.execute("""INSERT INTO table_name_here (ID, date, timest) ...
对于字符串连接:Postgres使用SQL标准双引号(不两个单引号!):"master"
,它在默认MySQL中不起作用。必须是`master`
- 或只是master
才能同时使用。
或者激活MySQL中某些SQL兼容性的设置:
SET sql_mode = 'ANSI';
答案 1 :(得分:0)
您可以使用格式化功能:
sql = "INSERT INTO {0} (ID, date, timest) VALUES (%s, %s, %s);".format(table_name)
cursor.execute(sql, (ID, date, time_stamp))
答案 2 :(得分:-2)
实际上,我能够找到问题的答案。简单地使用%而不是,符号修复了我的问题。
原始代码:
cur.execute("""INSERT INTO %s (ID, date, timest)
VALUES (%s, %s, %s);""",
(AsIs(table), ID, AsIs(date), AsIs(timestamp)))
固定代码:
cur.execute("""INSERT INTO %s (ID, date, timest)
VALUES (%s, %s, %s);""" %
(AsIs(table), ID, AsIs(date), AsIs(timestamp)))