我可以编写一个独立于SQL引擎的python/SQL代码吗(PostGres/Sqlite)

2024-09-30 07:21:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python代码,其中我在数据库中发出SQL请求。我希望能够在postgresql(使用模块psycopg2)和sqlite数据库(使用模块sqlite3)之间切换,而不需要调整代码。这意味着,我希望在代码中包含一些固定的SQL请求字符串,并且我希望在引擎之间切换,只需更改数据库连接器对象的定义,使用其中一个:

  • my_db = psycopg2.connect(...)
  • my_db = sqlite3.connect(...)

目前,我不认为有任何可能性,因为:

  1. 每个人都知道不应该使用字符串连接来将参数传递给SQL请求,而应该使用占位符(来自psycopg2 docu:从不,从不使用Python字符串连接。。。将变量传递到SQL查询字符串。即使在枪口下也不行。
  2. 占位符的synthax不同于2个api psycopg2和sqlite3。即使是非命名占位符。Psycopg使用“%”,sqlite3使用“?”:
    • my_cursor.execute("SELECT * FROM table WHERE id= ?", (my_id,)) # for SQLITE3
    • my_cursor.execute("SELECT * FROM table WHERE id= %", (my_id,)) # for PSYCOPG2
  3. 原则上可以使用SQL内置占位符synthax(“?” 对于postgresql),但这意味着使用python字符串连接精确地准备一个SQL字符串,等等。。。这是1禁止的。在

我缺乏想法。。。在


Tags: 模块字符串代码id数据库executedbsql

热门问题