csvファイルに格納されている初期データを新しいデータベースに取り込みたいとします。 odoを使用して、既存のテーブルにcsvファイルの内容を入力しようとしました。私のファイルには主キーがなく、データベースに追加の列が定義されているため、列の数が一致しません。プライマリキーなしでcsvファイルをsqlite3にインポートするには
これを行うにはどのようにodoを使用できますか?これは動作しません
col A;col B
aa;bb
ax;bx
:
from odo import odo
odo('csvfile.csv',
'sqlite:///testdb.db::testtable',
has_header=True)
エラーメッセージ:
from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Test(Base):
__tablename__ = 'testtable'
uid = Column(Integer, primary_key=True)
colA = Column(String(50))
colB = Column(String(50))
comment = Column(String(100))
engine = create_engine('sqlite:///testdb.db')
Base.metadata.create_all(engine)
マイたcsvfileは、このようになります
expected 4 columns but found 3 - filling the rest with NULL
INSERT failed: datatype mismatch
どのように動作しませんか?エラーが出ますか?そうであれば、それらを質問に含めてください。 –
関連するエラーメッセージを追加しました。データベースに正しい数の列があり、一致する列ヘッダーがあるcsvファイルがある場合も同じことができます。 – Bjoern
解決策ではありませんが、odoはSQLiteの場合は実際のCSVからSQLへのインポートにSQLAlchemyを使用していません。https://github.com/blaze/odo/blob/master/odo/backends/sql_csv.py #L63。このエラーは、['.import csvfile.csv testtable'](https://sqlite.org/cli.html#csv_import)コマンドが失敗した結果です。 –