(md5或sha1)的sqlite3无法识别的令牌错误

时间:2012-03-24 09:30:53

标签: python sqlite md5 sha

如何使用python在sqlite3中创建一个sha1或md5作为表名的表,我得到Exception OperationalError说无法识别的令牌,是否有任何替代方法

2 个答案:

答案 0 :(得分:2)

我假设你正在使用像md5.hexdigest()这样的函数值作为表名。如果是这样,那么您需要考虑哈希值可能从数字开始的事实。 SQLite不允许您从数字开始表名。最简单的解决方案是添加某种前缀,例如:

>>> table_name = "table%s" % hashlib.sha1('blurp').hexdigest()
>>> print(table_name)
table5187399948bdcff4fa10220cd8509257567c6b5a

答案 1 :(得分:1)

对我来说很好:

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> conn.execute('create table md5 (mycol)') # if you're being very literal
<sqlite3.Cursor object at 0x35b7dc0>
>>> import hashlib
>>> tbl_name = hashlib.sha1('test').hexdigest()
>>> conn.execute('create table {} (mycol)'.format(tbl_name)) # otherwise
<sqlite3.Cursor object at 0x35b7dc0>

警告:在您获得用户输入的任何设置中都不要使用字符串插值,因为您将面临SQL注入攻击的风险。