Вопросительный знак "?" замена для CREATE TABLE, DROP TABLE в SQL - Ограничения - PullRequest
0 голосов
/ 08 ноября 2018

Я новичок в SQL и работаю над выяснением того, как писать чистые / эффективные команды SQL.

Я использую пакет sqlite3 из Python и пытаюсь использовать замену вопросительного знака в сочетании с функцией executemany () для написания эффективных команд.

Я видел такие примеры:

with sql.connect("db_file.db") as conn:
    cur = conn.cursor()
    purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
                 ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
                 ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
                ]
    cur.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
    conn.close()

И мне интересно, могу ли я использовать подобный синтаксис для создания / удаления таблиц:

with sql.connect("db_file.db") as conn:
    cur = conn.cursor()
    tables = ["MajorInfo",
                "CourseInfo",
                "StudentInfo",
                "StudentGrades"]
    cur.executemany("DROP TABLE IF EXISTS (?);", tables)
    conn.close()

Приведенный выше код вызывает следующее исключение:

Traceback (most recent call last):
  File "sql_test.py", line 4, in <module>
    sql1.student_db()
  File "/acmeshare/jastern/byu_vol2/SQL1/sql1.py", line 57, in student_db
    cur.executemany("DROP TABLE IF EXISTS (?);", tables)
  sqlite3.OperationalError: near "(": syntax error

Возможно ли то, что я пытаюсь сделать в SQL? Есть ли обычный способ сделать то, что я пытаюсь сделать? Спасибо!

Обновление:

Чтобы убедиться, что проблема не связана с функцией executemany(), я попытался:

table = "MajorInfo"
cur.execute("DROP TABLE IF EXISTS ?;", table)
conn.close()

и получил sqlite3.OperationalError: near "?": syntax error. Я так думаю? замена может быть ограничена использованием только в командах INSERT INTO и SELECT.

1 Ответ

0 голосов
/ 08 ноября 2018

Оператор SQLite DROP TABLE не принимает параметры в скобках. Кроме того, он не принимает несколько параметров, поэтому то, что вы хотите, скорее всего, невозможно, к сожалению.

Оператор DROP TABLE определяется как:

DROP TABLE definition

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...