Python 3.x 如何在python中将变量插入sqlite数据库?

Python 3.x 如何在python中将变量插入sqlite数据库?,python-3.x,sqlite,Python 3.x,Sqlite,我的代码似乎运行良好,没有任何错误,但它只是创建了一个空的数据库文件,其中没有任何内容,无法找出我在这里做错了什么 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.ex

我的代码似乎运行良好,没有任何错误,但它只是创建了一个空的数据库文件,其中没有任何内容,无法找出我在这里做错了什么

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
子句将
字符串
数字
进行比较。返回一个字符串,因此您确实应该将其与另一个字符串进行比较

请尝试以下操作:

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()

那它应该对你有用

我发现这个插入变量的示例非常有用

c.execute("SELECT * FROM {tn} WHERE {idf}={my_id}".\
        format(tn=table_name, cn=column_2, idf=id_column, my_id=some_id))
这里是到教程的链接。

数据库文件变为空白的原因不是因为变量未正确插入SQL语法。这是因为您在这里所做的
cur.commit()
。您不需要提交游标来保存对数据库的任何更改。您要将此属性应用于连接到数据库文件的变量。因此,在您的情况下,它应该是
con.commit()


希望这有帮助:)

它不应该是
插入到联系人值中吗…
?是的,我确实纠正了那个部分,但它仍然不起作用。现在可以了,非常感谢。令人惊讶的是,两个非常小的错误导致整个程序无法运行。哈哈,编程就是这样。其中一条建议是在代码中放置打印内容的调试行。例如,在函数定义中,放一行,写上
print(“create_db()function called”)
,这样您就知道程序在写入其输出时将到达何处:)