【发布时间】:2012-03-24 09:30:53
【问题描述】:
如何使用 python 在 sqlite3 中创建一个以 sha1 或 md5 作为表名的表,我收到异常 OperationalError 说无法识别的令牌,是否有任何替代方法
【问题讨论】:
-
请发布完整的回溯和代码的适当部分。谢谢。
如何使用 python 在 sqlite3 中创建一个以 sha1 或 md5 作为表名的表,我收到异常 OperationalError 说无法识别的令牌,是否有任何替代方法
【问题讨论】:
我假设您使用像 md5.hexdigest() 这样的函数的值作为表名。如果是这样,那么您需要考虑哈希值可能从数字开始这一事实。 SQLite 不允许您从数字开始表名。最简单的解决方案是添加某种前缀,例如:
>>> table_name = "table%s" % hashlib.sha1('blurp').hexdigest()
>>> print(table_name)
table5187399948bdcff4fa10220cd8509257567c6b5a
【讨论】:
对我来说很好用:
>>> 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 注入攻击的风险。
【讨论】: