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. Имя таблицы не может быть параметризовано.
Также у вас есть кавычки вокруг параметризованного аргумента во втором запросе. Удалите кавычки, экранирование обрабатывается автоматически подчеркивающей библиотекой.
Другие советы
Попробуйте удалить кавычки в строке, которая присваивается stmt2
:
stmt2 = "insert into asgn values (?, ?)"
Кроме того, как говорит nosklo, нельзя использовать параметризацию с вопросительным знаком в инструкциях CREATE TABLE. Вставьте имя таблицы в SQL напрямую.
Если вы действительно хотите это сделать, попробуйте что-то вроде этого:
def read (db = " projects "):
sql = "select * from %s"
sql = sql % db
c.execute(sql)