Python pysqliteがqmarkパラメーター化を受け入れない
-
19-08-2019 - |
質問
適切なパッケージをインポートしていない可能性がありますが、そうすると...
from pysqlite2 import dbapi2 as sqlite
import types
import re
import sys
...
def create_asgn(self):
stmt = "CREATE TABLE ? (login CHAR(8) PRIMARY KEY NOT NULL, grade INTEGER NOT NULL)"
stmt2 = "insert into asgn values ('?', ?)"
self.cursor.execute(stmt, (sys.argv[2],))
self.cursor.execute(stmt2, [sys.argv[2], sys.argv[3]])
...
I get the error pysqlite2.dbapi2.OperationalError: near "?": syntax error
これは、pysqliteがqmarkパラメータ化されていることをドキュメントが示しているため、私にはほとんど意味がありません。私はpythonとdb-apiが初めてですが、助けてください!ありがとう
解決
これは、パラメーターをVALUESにのみ渡すことができるためです。テーブル名はパラメーター化できません。
また、2番目のクエリでパラメータ化された引数を引用符で囲みます。引用符を削除すると、エスケープは自動的に下線ライブラリによって処理されます。
他のヒント
stmt2
に割り当てる行の引用符を削除してみてください:
stmt2 = "insert into asgn values (?, ?)"
また、noskloが言うように、CREATE TABLEステートメントで疑問符のパラメーター化を使用することはできません。テーブル名をSQLに直接貼り付けます。
本当にやりたい場合は、次のようにしてください:
def read(db = <!> quot; projects <!> quot;):
sql = "select * from %s"
sql = sql % db
c.execute(sql)
所属していません StackOverflow