我正在使用python和sqlite3编写一个非常简单的数据库。当我创建一个表和一些数据时,我想使用(在终端中)命令显示这些数据"选择*从数据",但没有数据出现,尽管我使用其他方法检查数据是否插入到桌子。
我如何创建表格和数据:
db = connect('database.db')
db_cursor = db.cursor()
db_cursor.execute("CREATE TABLE IF NOT EXISTS Data(Id INT, Name TEXT, City TEXT)")
db_cursor.execute("INSERT INTO Data VALUES (1, 'ABC', 'XYZ')")
如果我这样做:
db_cursor.execute("Select * From Data")
print self.db_cursor.fetchall()
显示数据。
但是当我运行命令行并尝试这样做时:
sqlite3 database.db
sqlite> .mode column
sqlite> .headers on
sqlite> SELECT * FROM Data;
没有数据出现。我检查了
sqlite> .tables
正确生成该表。 为什么从命令行运行sqlite3不显示数据?
答案 0 :(得分:2)
您需要在事务永久成为数据库之前提交事务:
db.commit()
如果代码块成功执行,您可以使用数据库连接as a context manager自动提交:
with db:
db_cursor = db.cursor()
db_cursor.execute("INSERT INTO Data VALUES (1, 'ABC', 'XYZ')")
请注意,DDL语句(创建表和其他数据定义)是automatically committed,这就是您在数据库中看到表而不是新行的原因。