Как вставить переменную в базу данных sqlite в python?

Вопрос:Мой код, кажется, работает нормально без каких-либо ошибок, но он просто создает пустой файл базы данных, в котором нет ничего, Cant выясняет, что я делаю неправильно здесь. import sqlite3 as lite import sys con = lite.connect('test43.db') def create_db(): with con: cur = con.cursor() cur.execute("DROP TABLE IF EXISTS Contacts") cur.execute("CREATE TABLE Contacts (First Name TEXT, Last

Вопрос:

Мой код, кажется, работает нормально без каких-либо ошибок, но он просто создает пустой файл базы данных, в котором нет ничего, Cant выясняет, что я делаю неправильно здесь.

import sqlite3 as lite import sys con = lite.connect(‘test43.db’) def create_db(): with con: cur = con.cursor() cur.execute(«DROP TABLE IF EXISTS Contacts») cur.execute(«CREATE TABLE Contacts (First Name TEXT, Last Name TEXT, Phone TEXT, Email TEXT);») cur.execute(«INSERT INTO Contacts VALUES (?, ?, ?, ?);», (firstname, lastname, phone, email)) cur.commit() #Get user input print (‘Enter a new contact’) print (») firstname = input(‘Enter first name: ‘) lastname = input(‘Enter last name: ‘) phone = input(‘Enter phone number: ‘) email = input(‘Enter Email address: ‘) createnewdb = input(‘Enter 1 to create new db: ‘) if createnewdb == 1: create_db() else: sys.exit(0) Лучший ответ:

Не доходит до метода create_db(), так как предложение if сравнивает string с a number. input() возвращает строку, поэтому вы действительно должны сравнивать ее с другой строкой.

попробуйте следующее:

if createnewdb == «1»: create_db() else: sys.exit(0)

Затем вы должны называть commit() на объекте подключения, а не курсором.. поэтому немного измените метод create_db() здесь тоже:

def create_db(): with con: cur = con.cursor() cur.execute(«DROP TABLE IF EXISTS Contacts») cur.execute(«CREATE TABLE Contacts (First Name TEXT, Last Name TEXT, Phone TEXT, Email TEXT);») cur.execute(«INSERT INTO Contacts VALUES (?, ?, ?, ?);», (firstname, lastname, phone, email)) ## call commit on the connection… con.commit()

тогда он должен работать для вас!

Ответ №1

Я нашел этот пример для вставки переменных очень полезными.

c.execute(«SELECT * FROM {tn} WHERE {idf}={my_id}». format(tn=table_name, cn=column_2, idf=id_column, my_id=some_id))

Вот ссылка на учебник.
http://sebastianraschka.com/Articles/2014_sqlite_in_python_tutorial.html

Ответ №2

Причина, по которой ваш файл базы данных становится пустым, заключается не в том, что ваши varbiables не вставлены в ваш синтаксис SQL правильно. Это из-за того, что вы здесь сделали cur.commit(). Вы не обязаны фиксировать свой курсор для сохранения любых изменений в базе данных. Вы должны применить этот атрибут к переменной, в которую вы подключились к файлу базы данных. Поэтому в вашем случае это должно быть con.commit()

Надеюсь, что это поможет:)

Оцените статью
Добавить комментарий