【发布时间】:2018-05-22 22:38:17
【问题描述】:
我想用存储在 csv 文件中的初始数据填充一个新的数据库。 我尝试使用 odo 用 csv 文件的内容填充现有表。我的文件没有主键,并且列数不匹配,因为数据库定义了其他列。
如何使用 odo 来实现这一点?
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)
我的 csv 文件如下所示:
col A;col B
aa;bb
ax;bx
这不起作用:
from odo import odo
odo('csvfile.csv',
'sqlite:///testdb.db::testtable',
has_header=True)
错误信息:
expected 4 columns but found 3 - filling the rest with NULL
INSERT failed: datatype mismatch
【问题讨论】:
-
不工作怎么办?你有错误吗?如果是这样,请将它们包括在问题中。
-
我添加了相关的错误信息。如果我在数据库中有正确数量的列和具有匹配列标题的 csv 文件,则同样有效。
-
不是一个解决方案,但请注意,在 SQLite 的情况下,odo 不会将 SQLAlchemy 用于实际的 CSV 到 SQL 导入:github.com/blaze/odo/blob/master/odo/backends/sql_csv.py#L63。该错误是
.import csvfile.csv testtable命令失败的结果。
标签: python sqlite csv sqlalchemy odo