【发布时间】:2015-09-20 06:42:22
【问题描述】:
我正在尝试执行插入查询。 当我直接将其复制并粘贴到 mysql 命令提示符时它可以工作,但当我从 Python 执行它时失败。我在 MySQLdb 中遇到此错误(也尝试直接使用 _mysql 并得到相同的错误)。
错误和这个问题一样,但是答案对我的问题不起作用(我的查询在一行上):MySQL the right syntax to use near '' at line 1 error
query = """INSERT INTO %s(%s) VALUES (%f) ON DUPLICATE KEY UPDATE %s=%f"""%(table_name,measurement_type,value,measurement_type,value)
print query
cur.execute(query)
结果(它打印查询,当直接复制到 MySQL 命令提示符时执行正常,然后崩溃):
INSERT INTO D02CA10B13E5$accelerometer_X(periodic) VALUES (79.000000) ON DUPLICATE KEY UPDATE periodic=79.000000
Traceback (most recent call last):
File "collect_data.py", line 145, in <module>
process_data_array(data_bytes[start:start+sensor_packet_size])
File "collect_data.py", line 105, in process_data_array
record_data(MAC,sensor_name,"X",code_name,X,cur)
File "collect_data.py", line 58, in record_data
cur.execute(query)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_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 '' at line 1")
我尝试打开分析,因为我似乎无法从光标访问 _last_executed(其他人建议)。我的光标似乎没有这个属性(被删除了吗?)。
query = """INSERT INTO %s(%s) VALUES (%f) ON DUPLICATE KEY UPDATE %s=%f"""%(table_name,measurement_type,value,measurement_type,value)
print query
#cur.execute(query)
try:
cur.execute(query)
except:
cur.execute('show profiles')
for row in cur:
print row
cur.execute("set profiling = 0")
exit()
这显示了一个不完整的查询:
INSERT INTO D02CA10B13E5$accelerometer_X(periodic) VALUES (80.000000) ON DUPLICATE KEY UPDATE periodic=80.000000
(1L, 5.925e-05, 'INSERT INTO D02CA10B13E5')
有些人建议将查询分成多行(这与我在上面发布的链接中的建议相矛盾)。无论如何,它将搜索范围缩小到一行(显然 Python 模块不喜欢我在第三行的表名或列名)
query = "INSERT \nINTO \n%s(%s) \nVALUES \n(%f) \nON \nDUPLICATE \nKEY \nUPDATE %s=%f"%(table_name,measurement_type,value,measurement_type,value)
print query
cur.execute(query)
结果:
INSERT
INTO
D02CA10B13E5$accelerometer_X(periodic)
VALUES
(80.000000)
ON
DUPLICATE
KEY
UPDATE periodic=80.000000
Traceback (most recent call last):
File "collect_data.py", line 145, in <module>
process_data_array(data_bytes[start:start+sensor_packet_size])
File "collect_data.py", line 105, in process_data_array
record_data(MAC,sensor_name,"X",code_name,X,cur)
File "collect_data.py", line 58, in record_data
cur.execute(query)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_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 '' at line 3")
同样,这个查询在 MySQL 上执行得很好,所以我不确定 Python 中发生了什么。任何指针表示赞赏。谢谢!
【问题讨论】:
-
我怀疑“$”符号。我建议您尝试转义它,(使用“\$”)或者看看如果您在名称中没有“$”的表上运行查询会发生什么。
-
尝试删除“$”,没有帮助。这是一个允许的模式对象字符:dev.mysql.com/doc/refman/5.0/en/identifiers.html 但是谢谢,值得检查。
标签: python mysql python-2.7 mysql-python