如何在Python中将变量插入SQLite数据库?

5

我的代码似乎没有任何错误,但是它只创建了一个空的数据库文件,里面什么都没有,我无法弄清楚我在这里做错了什么。

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)

难道不应该是 insert into contacts VALUES ... 吗? - Ionut Hulub
是的,我实际上纠正了那一部分,但它仍然不起作用。 - Skilo Skilo
3个回答

3

2

由于if语句中将字符串与数字进行比较,导致无法进入create_db()方法。而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()

那么它应该对你有效!

现在可以工作了,非常感谢。真是太神奇了,两个非常微小的错误导致整个程序都无法工作,哈哈。 - Skilo Skilo
2
哈哈,编程就是这样。一个建议是在你的代码中添加打印输出的调试行。例如,在函数定义的内部放置一行print("create_db() function called"),这样当程序输出其输出时,你就知道它到了哪里 :) - msturdy

0
你的数据库文件变成空白的原因不是因为你的变量没有正确地插入到SQL语法中,而是因为你在这里做了这个cur.commit()。你不应该提交你的光标以保存对数据库所做的任何更改,而是应该将此属性应用于已连接到数据库文件的变量。因此,在你的情况下,它应该是con.commit()
希望能帮到你 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接