【发布时间】:2020-11-21 16:22:48
【问题描述】:
import sqlite3
conn = sqlite3.connect('serpin.db')
c = conn.cursor()
c.execute("""CREATE TABLE Gene(Gene_name TEXT, Organism TEXT, link_2_gene_with_ID TEXT, Number_SpliceForm INTEGER,ID_mRNA INTEGER, ID_Prt INTEGER);""")
c.execute(".import practice.csv Gene --csv")
c.execute(".mode column")
c.execute("select * from Gene;")
print(c.fetchall())
conn.commit()
conn.close
我可以在 sqlite3 的 windows 终端上单独运行所有这些命令。但是,我在运行此代码时遇到了多个错误,这大致是我在没有错误的 bash 脚本中使用的。我收到的第一个错误是“表基因已经存在”的错误。现在,即使我注释掉该行,我也会在导入命令中得到一个错误,它说在导入之前的句点存在语法错误。这些都是 sqlite3.OperationalError。我已经尝试直接在 sqlite3 中自己运行这些命令并且没有问题,所以我不确定问题是什么。
我在这个文件夹中没有数据库,所以我不确定表是如何制作的。
edit(solution): this 的输出格式不正确,但运行时没有错误。
import csv,sqlite3
conn = sqlite3.connect('serpin.db')
c = conn.cursor()
try:
c.execute("""CREATE TABLE Gene (Gene_name TEXT, Organism TEXT, link_2_gene_with_ID TEXT, Number_SpliceForm INTEGER,ID_mRNA INTEGER, ID_Prt INTEGER);""")
except:
pass
path = r'C:\Users\User\Desktop\sqlite\practice.csv'
with open(path,'r') as fin: # `with` statement available in 2.5+
# csv.DictReader uses first line in file for column headings by default
dr = csv.DictReader(fin) # comma is default delimiter
to_db = [(i['Gene_name'], i['Organism'],i['link_2_gene_with_ID'],i['Number_SpliceForm'],i['ID_mRNA'],i['ID_Prt'] ) for i in dr]
c.executemany("INSERT INTO Gene (Gene_name,Organism,link_2_gene_with_ID,Number_SpliceForm,ID_mRNA,ID_Prt) VALUES (?,?,?,?,?,?);", to_db)
c.execute("select * from Gene;")
print(c.fetchall())
conn.commit()
conn.close
【问题讨论】:
-
这些带点号的命令用于 Sqlite shell。实际的数据库引擎不支持它们。