我有以下示例CSV文件:
AlignmentId,Classifier,Value
aln1,classifier1,True
aln1,classifier2,False
aln2,classifier1,True
哪个应该由元组(AlignmentId, Classifier)
唯一键控,并且我想使用此层次结构索引将其加载到SQL。当我这样做时,pandas会生成两个(非唯一)索引:
import pandas as pd
import sqlalchemy
df = pd.read_csv('test.csv', index_col=[0, 1])
con = sqlalchemy.create_engine('sqlite:///test.db')
df.to_sql('test', con)
如果我去sqlite表,并询问架构:
sqlite> .open test.db
sqlite> .schema
CREATE TABLE test (
"AlignmentId" TEXT,
"Classifier" TEXT,
"Value" BOOLEAN,
CHECK ("Value" IN (0, 1))
);
CREATE INDEX "ix_test_Classifier" ON test ("Classifier");
CREATE INDEX "ix_test_AlignmentId" ON test ("AlignmentId");
sqlite>
为什么这不会产生层次索引?我有一些似乎工作的遗留代码,当我检查数据库模式时,我改为看
CREATE INDEX "ix_BALB_cJ_cgp_CgpId_EnsId"ON "BALB_cJ_cgp" ("CgpId","EnsId");
编辑:进一步分析,这似乎是使用sqlalchemy
作为连接引擎和使用旧版sqlite3
包之间的区别。
所以,这个问题可能会被重新描述'我如何让SQLAlchemy生成这样的层次索引?'