Python sqlite3 cursor.execute () с параметрами приводит к синтаксической ошибке рядом? (Paramstyle Qmark)

StackOverflow https://stackoverflow.com/questions/19843668

Вопрос

После поиска до безумия я решил опубликовать здесь вопрос. Я стараюсь создать базу данных SQLite3, где я хотел бы использовать функцию замены замены переменной функции Cursor.Execute (SQL, PARAM). Моя функция выглядит так:

#!/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 в форме строки, а второй аргумент должен быть кортежом значений, которые должны быть заменены, где? находится в строке 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 установлен на именем (например, форма таблицы). Я не могу заметить здесь синтаксисную ошибку, поэтому я думаю, что проблема должна быть вызвана где -то в системе. Я проверил его на установке Archlinux и Debian, оба опубликовали мне одну и ту же ошибку.

Теперь это вы, вы больше не имею представления, где искать дело.

Это было полезно?

Решение

Параметры SQL могут применяться только к вставке данные, не имена таблиц. Это означает, что параметры даже не проанализированы для операторов DDL.

Для этого вам придется использовать форматирование строки:

sql = "CREATE TABLE IF NOT EXISTS {} ( name TEXT, street TEXT, time REAL, age INTEGER )".format(*values)

Другие советы

Насколько я понимаю, ваш параметр - это имя таблицы?

так что ваша команда будет

tbl = 'my_table'
sql = "CREATE TABLE IF NOT EXISTS '%s' ( name TEXT, street TEXT, time REAL, age INTEGER )" % tbl
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top