【问题标题】:sqlite3 unrecognized token error for ( md5 or sha1)sqlite3 无法识别的令牌错误(md5 或 sha1)
【发布时间】:2012-03-24 09:30:53
【问题描述】:

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

【问题讨论】:

  • 请发布完整的回溯和代码的适当部分。谢谢。

标签: python sqlite md5 sha


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    对我来说很好用:

    >>> 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 注入攻击的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      相关资源
      最近更新 更多