2

私はこの問題に1時間以上苦労しました。dbf テーブルを使用して Sqlite データベースを作成しようとしています。Sqlite ステートメントの入力として使用する dbf から派生したレコードのリストを作成すると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()
4

1 に答える 1

5

conn.commit()これが唯一の問題ではないかもしれませんが、変更を SQLite データベースに保存するために呼び出す必要があります。参照: http://www.python.org/dev/peps/pep-0249/#commit

于 2013-10-11T00:14:43.470 に答える