sqlite3的无法识别的令牌错误

问题描述:

如何使用Python创建具有SHA1或MD5如sqlite3的表名的表,我收到异常OperationalError说无法识别的令牌,是否有任何替代方法sqlite3的无法识别的令牌错误

+0

请发布完整的追溯和代码的相应部分。谢谢。 – bernie 2012-03-24 09:36:39

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

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

谢谢我做到了 – abhijeet 2012-03-24 18:36:48

厂细对我来说:

>>> 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注入攻击的风险的任何设置使用字符串插值。