Python+Sqlite 3。如何构造查询?

Python+Sqlite 3。如何构造查询?,python,sqlite,Python,Sqlite,我试图创建一个python脚本来构造有效的sqlite查询。我想避免SQL注入,因此无法使用“%s”。我已经找到了如何执行查询,cursor.execute'sql?',param,但我想知道如何获取解析后的sql参数。如果我必须先执行查询才能获得最后执行的查询,这不是问题。使用DB-API的参数替换。放作为占位符,然后提供一个值元组作为游标的execute方法的第二个参数 更多的参考是 我想知道如何获取已解析的“sql参数” 它都是开源的,因此您可以完全访问执行解析/清理的代码。为什么不阅读这

我试图创建一个python脚本来构造有效的sqlite查询。我想避免SQL注入,因此无法使用“%s”。我已经找到了如何执行查询,cursor.execute'sql?',param,但我想知道如何获取解析后的sql参数。如果我必须先执行查询才能获得最后执行的查询,这不是问题。

使用DB-API的参数替换。放作为占位符,然后提供一个值元组作为游标的execute方法的第二个参数

更多的参考是

我想知道如何获取已解析的“sql参数”


它都是开源的,因此您可以完全访问执行解析/清理的代码。为什么不阅读这段代码并了解它是如何工作的,以及是否有一些可能未记录的实现可以重用?

如果您不只是在进行参数替换,而是在完成SQL的完整构造,那么您必须使用字符串操作来实现这一点。这个替换总是代表一种价值。在内部,SQL字符串被编译成SQLite自己的字节码,您可以通过解释SQL和?替换只需将值存储在值堆栈中的正确位置即可完成;在结构上改变查询需要不同的字节码,所以仅仅替换一个值是不够的


是的,这意味着你必须非常小心。如果不允许更新,请尝试以只读模式打开数据库连接。

如果要将对数据库的更改传输到另一台计算机,为什么必须将其表示为SQL字符串?为什么不将查询字符串和参数作为元组进行pickle,让另一台机器也使用SQLite参数化来查询其数据库?

是的,但我想要的是查询,而不是结果。例如,从股票中选择*符号=tralala,我也试过了。我以导入_sqlite3结束,我认为它对应于“/usr/lib64/python2.7/lib dynload/_sqlite3.so”文件我想我会使用类似sqlalchemy的东西,然后执行pickle.dump,它会将对象存储在一个文件中,这样我以后就可以使用同一个对象。我只想能够在其他计算机上重新创建数据库。因为我想使用尽可能少的带宽,所以我需要创建包含更改的部分转储,并通过网络传输它们。使用sqlalchemy之类的东西,用pickle存储对象,然后在远程计算机中使用它们,这是个好主意吗?
# Never do this -- insecure!
symbol = 'hello'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

# Do this instead
t = (symbol,)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()