如何在python中将变量插入sqlite数据库?

时间:2013-11-03 23:10:14

标签: 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.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)

3 个答案:

答案 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()子句正在将ifstring进行比较,因此无法使用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()

希望这会有所帮助:)