在MySQL中创建名为0e7cc62d5339491aa701b67453405ccb的表时出错

时间:2011-01-05 00:09:55

标签: python mysql

所以我正在运行一个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,))

1 个答案:

答案 0 :(得分:4)

问题在于以0e7cc62d5339491aa701b67453405ccb开头的表名0e7。使用反引号(`)转义表名,它应该可以工作。但是,正如@Randy所说,这个命名方案是一个坏主意。除非你有充分的理由,否则我会认真考虑改进它。

引用the docs

  

建议您不要使用   以Me或MeN开头的名称,其中   M和N是整数。例如,   避免使用1e作为标识符,   因为1e + 3这样的表达式是   暧昧。它取决于具体情况   可能被解释为表达式   1e + 3或数字1e + 3。