我已经为这个问题挣扎了一个多小时了。我尝试使用dbf表创建一个Sqlite数据库。当我创建一个从dbf派生的记录的列表以用作Sqliteexecutemany
语句的输入时,Sqlite表显示为空。当我尝试使用Python交互地复制这个问题时,Sqlite的执行是成功的。从dbf生成的列表是在我运行它时填充的,所以问题出在executemany
语句中。在
import sqlite3
from dbfpy import dbf
streets = dbf.Dbf("streets_sample.dbf")
conn = sqlite3.connect('navteq.db')
conn.execute('PRAGMA synchronous = OFF')
conn.execute('PRAGMA journal_mode = MEMORY')
conn.execute('DROP TABLE IF EXISTS STREETS')
conn.execute('''CREATE TABLE STREETS
(blink_id CHAR(8) PRIMARY KEY,
bst_name VARCHAR(39),
bst_nm_pref CHAR(2));''')
alink_id = []
ast_name = []
ast_nm_pref = []
for i in streets:
alink_id.append(i["LINK_ID"])
ast_name.append(i["ST_NAME"])
ast_nm_pref.append(i["ST_NM_PREF"])
streets_table = zip(alink_id, ast_name, ast_nm_pref)
conn.executemany("INSERT OR IGNORE INTO STREETS VALUES(?,?,?)", streets_table)
conn.close()
这可能不是唯一的问题,但是您需要调用
conn.commit()
来保存对SQLite数据库的更改。参考号:http://www.python.org/dev/peps/pep-0249/#commit相关问题 更多 >
编程相关推荐