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) 명령이 실패한 결과입니다. –