所以我正在运行一个Python脚本,它在MySQL数据库中生成一些表,并且我一直得到以下错误:
File "build/bdist.linux-i686/egg/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "build/bdist.linux-i686/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
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
'0e7cc62d5339491aa701b67453405ccb (\n\t email VARCHAR(50),\n\t price' at line 1")
问题是,它只在我试图创建名为
0e7cc62d5339491aa701b67453405ccb
的表时出错,除此之外,脚本运行良好!以下是错误发生区域的代码:
def add(i, p, e):
conn = MySQLdb.connect(...)
cursor = conn.cursor()
e = str(e)
d = str(hashlib.md5(e).hexdigest())
i = str(i)
p = str(p)
q = """CREATE TABLE IF NOT EXISTS %s (
email VARCHAR(50),
price VARCHAR(15),
isbn VARCHAR(15) NOT NULL,
PRIMARY KEY (isbn))""" % (d,)
print e
print "<br />"
print i
print "<br />"
print p
print "<br />"
print "<p />"
cursor.execute(q)
q = """REPLACE INTO %s (email,price,isbn)
VALUES (%%s,%%s,%%s)""" % (d,)
cursor.execute(q, (e,p,i,))
最佳答案
问题在于从0e7cc62d5339491aa701b67453405ccb
开始的表名0e7
。用反勾号(`
)转义表名,它应该可以工作。然而,正如@Randy所说,这种命名方案是个坏主意。除非你有很好的理由,否则我会认真考虑改进它。
引用the docs:
建议您不要使用
以我或男人开头的名字
M和N是整数例如,
避免使用1e作为标识符,
因为像1e+3这样的表达式
模棱两可的。根据上下文,它
可能被解释为
1e+3或作为数字1e+3。
关于python - 在MySQL中创建名为0e7cc62d5339491aa701b67453405ccb的表时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4599739/