私は、Foxproデータベースに保存されている6600株以上の財務データを持っています。データベースビューを15個のファイルのセットにダウンロードできます。最初は.dbfファイルに、次に.txtファイル(カンマ区切り)にしました。2つの同じデータSQLiteデータベースのサイズが異なるのはなぜですか?
.dbfファイルの場合、PythonとSqliteでspatialite仮想化拡張を使用して、それらをSqliteテーブルに変換し、8テーブルのデータベースにマージしました(DBF派生と呼ぶ)。だから、カーソルのCで:.txtファイルの場合
c.execute("CREATE VIRTUAL TABLE temp_virt USING VirtualDbf({}, UTF-8)".format(file))
c.execute("CREATE TABLE {} AS SELECT * FROM temp_virt;".format(table_name))
、私は変換して5つのCSVファイルに15個のファイルの12を結合するためにパンダを使用し、その後、私はPythonで残りの3つの.txtファイルでそれらをプライし、 8テーブルのデータベースを作成するためのSQLiteは(のは、CSV由来のそれを呼びましょう)(このpageから)このコードの修正バージョン使用して:私は両方のsqliteのデータベースを調査したときに今
with open(csvfile, "rb") as f:
reader = csv.reader(f)
header = True
for row in reader:
if header:
# gather column names from the first row of the csv
header = False
sql = "DROP TABLE IF EXISTS %s" % tablename
c.execute(sql)
sql = "CREATE TABLE %s (%s)" % (tablename,
", ".join([ "%s text" % column for column in row ]))
c.execute(sql)
for column in row:
if column.lower().endswith("_id"):
index = "%s__%s" % (tablename, column)
sql = "CREATE INDEX %s on %s (%s)" % (index, tablename, column)
c.execute(sql)
insertsql = "INSERT INTO %s VALUES (%s)" % (tablename,
", ".join([ "?" for column in row ]))
- を、私は次を発見しました:
- DBF由来データベースはID列を保持していました(プライマリキーとして設計されていませんでしたが)。
- ID列は、CSV由来のdbでダウンロードしても存続しませんでしたので、私は株式ティッカー列を主キーとして宣言しました。
- DBF由来のものは、sqliteでは索引付けされていません。
- CSV-derivedはsqliteで自動インデックスを取得しました。
- 日付はCSV由来のデータベースで日付形式を保持していましたが、DBF由来のdbでは数日になりました。
- DBF由来のデータベースの頂点化プロセスで発生した主なデータ型はREALで、これはCSV由来のDBを作成したため、データ型としても設定されています。
- CSV由来のdbのサイズがDBFのサイズより22%小さいことを除いて、他の点は同じですが、 が同じデータとデータ型を持っていると考えると、私は困惑しています。 2つのデータベースは技術的に同じ情報をDB ブラウザプログラムに表示します。サイズは、なぜ違いになど
どれ説明?それは私がCSVに変換しなかった3つの.txtファイルのためですか?
ありがとうございました。これは知っておくと便利ですが、DP BrowserのDBFソースのcharフィールドを詳しく調べると、末尾に空白がないようです。 CSVルートに行く理由は、データをダウンロードするプログラムによってDBFまたはCSVでのみ保存が可能です。 SQLiteに直接保存する機能はありません。だから私はファイルをSQLiteに変換する前にどちらかのフォーマットを使用しなければなりません。そして今までのCSVの方が効率的です。 –
CSVを使用したIMHOデータ転送でエラーが発生する可能性があります。チャンスがあるときはいつでも、データベースをデータベース転送に使用します。あなたのケースでは、DBFはより良い選択IMHOです。 –
再びありがとうございました。不思議なことに、私はDBFを使用すると不正確さが生じることを発見しました。 DBFルートは日付を(特定の日付から)日数として返し、いくつかの日付は奇妙にNULLに置き換えられましたが、すべての日付はCSV転送から完全に生き残り、MM/DD/YYYYとして表されます。 –