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

3 回答 3

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

于 2014-03-11T18:15:42.583 回答
2

它没有进入create_db()方法,因为该if子句将 astring与 a进行比较numberinput()返回一个字符串,所以你真的应该将它与另一个字符串进行比较..

尝试以下操作:

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

那么它应该为你工作!

于 2013-11-04T20:23:07.943 回答
0

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

希望这可以帮助 :)

于 2017-08-07T15:26:24.710 回答