6

sqlite3 でクエリのプレースホルダーを設定する方法はありますか? データベースで動作する関数がいくつかありますが、それらが mysql と sqlite の両方で動作することができれば、より満足できるでしょう。Mysql および Postgres python API は %s をプレースホルダーとして使用しますが、sqlite3 は代わりに疑問符を使用します。

データベース エンジンに関係なく、同じプレースホルダーを使用する方法を探しています。

ご協力いただきありがとうございます。

4

2 に答える 2

5

paramstyleグローバルの使用方法に関する以前のエラーを修正するために更新されました

使用する DB モジュールがPython データベース API 仕様 v2.0paramstyleに従っている場合、次のいずれかであるモジュール グローバルを取得できます。

  1. 'qmark' 疑問符のスタイル、例えば '...WHERE name=?'
  2. 'numeric' 数値、定位置スタイル、例: '...WHERE name=:1'
  3. 'named' 名前付きスタイル、例えば '...WHERE name=:name'
  4. 'format' ANSI C printf フォーマット コード、例: '...WHERE name=%s'
  5. 'pyformat' Python 拡張フォーマット コード、例えば '...WHERE name=%(name)s'

次に、モジュールで使用されるプレースホルダーを使用して SQL ステートメントを作成できます。次のようなことができます。

import sqlite3

paramstyle = sqlite3.paramstyle

if paramstyle == 'qmark':
    ph = "?"
elif paramstyle == 'format':
    ph = "%s"
else:
    raise Exception("Unexpected paramstyle: %s" % paramstyle)

sql = "INSERT INTO foo VALUES (%(ph)s, %(ph)s, %(ph)s)" % { "ph" : ph }
于 2012-08-29T18:26:43.660 に答える
5

基礎となるライブラリは をサポートしていないため%s、手動で置き換える必要があります。paramstyle代わりに、属性を確認して、クエリ内の別のプレースホルダーのすべてのインスタンスを適切な値に置き換える方が簡単な場合があります。

于 2012-08-29T18:30:28.087 に答える