我刚才使用sqlite3和python。我在数据库类中创建insert_row函数时遇到问题。从执行功能的手册中可以看出,我正确地完成了所有事情https://docs.python.org/2/library/sqlite3.html。此函数确实返回一个看起来对lastrowid正确的数字。但是,当我通过命令行访问sqlite3时,表是空的。
def insert_row(self, table, input_dict):
'''
(str, dict) -> int
Add a row to a table in the database
'''
count = 0
col_names = input_dict.keys()
insert_sql = 'INSERT INTO ' + self.sanitize(table) + ' (' + utils.list_to_char_seperated(col_names, ', ', False) + ') VALUES ('
for col in col_names:
count += 1
insert_sql += "'" + self.sanitize(input_dict[col]) + "'"
if count < len(col_names):
insert_sql += ', '
else:
insert_sql += ');'
cur = self.conn.cursor()
cur.execute(insert_sql)
return cur.lastrowid
通过命令行访问。
$ sqlite3
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open blood_cultures.db
sqlite> .tables
vein_draws
sqlite> SELECT * FROM vein_draws;
sqlite>
此外,如果我获取insert_sql变量的结果并通过命令行连接将其直接插入数据库,则此方法有效。所以我不相信这是我的插入声明。
关于我在这里做错了什么想法?