【问题标题】:Converting dbf to sqlite using Python is not populating table使用 Python 将 dbf 转换为 sqlite 不会填充表
【发布时间】:2013-10-10 23:52:16
【问题描述】:

我已经为这个问题苦苦挣扎了一个多小时。我正在尝试使用 dbf 表创建一个 Sqlite 数据库。当我创建从 dbf 派生的记录列表以用作 Sqlite executemany 语句的输入时,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 数据库。参考:python.org/dev/peps/pep-0249/#commit
  • 哈利路亚,做到了!呃,多么愚蠢的问题。谢谢伯尼。我希望我能接受您的评论作为答案。
  • 不客气。如果您愿意,可以删除问题。我认为这个问题经常出现。不要自责,去找下一个虫子吧! :-)
  • @bernie:要不要回答一下,这样我们就可以投票,user1185790 可以接受?
  • @EthanFurman:好的。感谢您的意见。

标签: python sql dbf


【解决方案1】:

这可能不是唯一的问题,但您想调用conn.commit() 将更改保存到 SQLite 数据库。参考:http://www.python.org/dev/peps/pep-0249/#commit

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2011-05-25
    • 2014-02-03
    • 2017-06-13
    • 2013-08-28
    • 2018-10-22
    • 2013-10-13
    • 2015-09-22
    • 2020-03-31
    相关资源
    最近更新 更多