我的代码似乎运行良好,没有任何错误,但它只是创建一个没有任何内容的空数据库文件,无法弄清楚我在这里做错了什么。
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)
答案 0 :(得分:3)
我发现这个插入变量的例子非常有用。
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
答案 1 :(得分:2)
由于create_db()
子句正在将if
与string
进行比较,因此无法使用number
方法。 input()
返回一个字符串,所以你真的应该将它与另一个字符串进行比较..
尝试以下方法:
if createnewdb == "1":
create_db()
else:
sys.exit(0)
然后,您应该在connection object上拨打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()
然后它应该适合你!
答案 2 :(得分:0)
您的数据库文件变空的原因并不是因为您的varbiables没有正确插入您的SQL语法。这是因为你在这里所做的cur.commit()
。您并不打算将光标提交到保存对数据库的任何更改。您的意思是将此属性应用于您已连接到数据库文件的变量。所以在你的情况下,它应该是con.commit()
希望这会有所帮助:)