狂気まで検索した後、ここに質問を投稿することにしました。cursor.execute(SQL, param) 関数の安全な変数置換関数を利用したい sqlite3 データベースを作成しようとしています。私の機能は次のようになります:
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import sqlite3
def create():
values = ("data")
sql = "CREATE TABLE IF NOT EXISTS ? ( name TEXT, street TEXT, time REAL, age INTEGER )"
con = sqlite3.connect("database.db")
c = con.cursor()
c.execute(sql, values)
con.commit()
c.close()
con.close()
if __name__ = "__main__":
create()
最初の引数は文字列形式の sql コマンドであり、2 番目の引数は ? SQL文字列にあります。ただし、ファイルを実行すると、次のエラーが返されます。
$ ./test.py
Traceback (most recent call last):
File "./test.py", line 21, in <module>
create()
File "./test.py", line 14, in create
c.execute(sql, values)
sqlite3.OperationalError: near "?": syntax error
これは、paramstyle が named に設定されている場合にも発生します (例: :table フォーム)。ここでは構文エラーを見つけることができないので、システムのどこかで問題が発生しているに違いないと思います。Archlinux と Debian のインストールでテストしましたが、どちらも同じエラーが表示されます。
どこで原因を探せばよいのか、もうわからないので、あなた次第です。