所以我正在运行一个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,))
答案 0 :(得分:4)
问题在于以0e7cc62d5339491aa701b67453405ccb
开头的表名0e7
。使用反引号(`
)转义表名,它应该可以工作。但是,正如@Randy所说,这个命名方案是一个坏主意。除非你有充分的理由,否则我会认真考虑改进它。
引用the docs:
建议您不要使用 以Me或MeN开头的名称,其中 M和N是整数。例如, 避免使用1e作为标识符, 因为1e + 3这样的表达式是 暧昧。它取决于具体情况 可能被解释为表达式 1e + 3或数字1e + 3。