【问题标题】:How to insert variable into sqlite database in python?如何在python中将变量插入sqlite数据库?
【发布时间】:2013-11-14 13:51:28
【问题描述】:

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

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 ...吗?
  • 是的,我确实纠正了那部分,但它仍然不起作用。

标签: python-3.x sqlite


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    它没有使用create_db() 方法,因为if 子句将stringnumber 进行比较。 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 个非常小的错误如何导致整个程序无法运行,哈哈。
    • 哈哈,编程就是这样。一条建议是在您的代码中放置打印内容的调试行。例如,在函数定义中,输入一行 print("create_db() function called"),这样您就知道程序在写入输出时要到达的位置:)
    【解决方案3】:

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

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多