相关疑难解决方法(0)

如何在Python中转义SQLite表/列名的字符串?

在SQLite查询中使用变量值的标准方法是"问号样式",如下所示:

import sqlite3
with sqlite3.connect(":memory:") as connection:
    connection.execute("CREATE TABLE foo(bar)")
    connection.execute("INSERT INTO foo(bar) VALUES (?)", ("cow",))

    print(list(connection.execute("SELECT * from foo")))
    # prints [(u'cow',)]
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于将值替换为查询.用于表或列名称时失败:

import sqlite3
with sqlite3.connect(":memory:") as connection:
    connection.execute("CREATE TABLE foo(?)", ("bar",))
    # raises sqlite3.OperationalError: near "?": syntax error
Run Code Online (Sandbox Code Playgroud)

sqlite3模块和PEP 249都没有提到转义名称或值的功能.据推测,这是为了阻止用户用字符串组装他们的查询,但这让我感到茫然.

什么函数或技术最适合在SQLite中为列或表使用变量名?我非常希望能够在没有任何其他依赖项的情况下执行此操作,因为我将在我自己的包装器中使用它.

我找了但是找不到SQLite语法相关部分的清晰完整的描述,用来编写我自己的函数.我想确保这适用于SQLite允许的任何标识符,因此试错法对我来说太不确定了.

SQLite 用于"引用标识符,但我不确定只是转义它们就足够了.PHP sqlite_escape_string函数的文档表明某些二进制数据也可能需要转义,但这可能是PHP库的一个怪癖.

python sqlite

47
推荐指数
6
解决办法
2万
查看次数

标签 统计

python ×1

sqlite ×1