извлечение данных из таблицы на основе значения из переменной Python - PullRequest
0 голосов
/ 19 сентября 2018

Я пишу функцию, которая будет извлекать данные из таблицы sqlite на основе параметров, предоставленных пользователем.Пока эта функция

def database_retrieve(db_file, id):
    try:
        conn = sqlite3.connect(db_file)

        with conn:
            sql_command = "SELECT * FROM my_table WHERE id = "+id

            cur = conn.cursor()
            cur.execute(sql_command)
            result = cur.fetchall()

            return result

    except Exception as e:
        print(e)

db_file = 'testdb.db'
print(database_retrieve(db_file, 'subject1'))

Это дает мне следующую ошибку

no such column: subject1
None

Когда я добавляю subject1, которая является записью под столбцом id в my_table, непосредственно к команде sql, подобной этой

sql_command = "SELECT * FROM my_table WHERE id = 'subject1'"

, она отлично работает и печатает все данные.

Я новичок в sqlite3.Пожалуйста помоги.Заранее спасибо

Это ссылки, которые я использовал, чтобы зайти так далеко Python sqlite3 строковая переменная в execute

https://www.dummies.com/programming/databases/how-to-retrieve-data-from-specific-rows-in-mysql-databases/

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Когда вы делаете это

sql_command = "SELECT * FROM my_table WHERE id = "+id

Значение sql_command равно

"SELECT * FROM my_table WHERE id = subject1"

Как видите, subject1 не в кавычках.sqlite считает, что это столбец, поэтому вы видите эту ошибку.

Вместо этого сделайте это

sql_command = "SELECT * FROM my_table WHERE id = ?"
cur.execute(sql_command, [id])

? действует как заполнитель для переменной id.

Официальная документация sqlite3 упоминает несколько других методов https://docs.python.org/2/library/sqlite3.html

0 голосов
/ 19 сентября 2018

Сгенерированная строка sql_command должна выглядеть примерно так (отформатированная строка):

sql_command = "SELECT * FROM my_table WHERE id = %s AND name = %s" % (212212, 'shashank')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...