使用python将数据从text.csv文件导入sqlite表



我正在开发一个python应用程序,在该应用程序中我连接到现有的SQLite数据库和表。我有一个CSV文件,每行包含一个值(股票符号(,我想将所有值导入现有的表列";符号";使用python。我该怎么做?

我尝试定义一个插入函数:

def insert(symbol):
conn=sqlite3.connect("stocks.db")
cur=conn.cursor()
cur.executemany("INSERT INTO stocks (symbol) VALUES (?)", (symbol,))
conn.commit()
conn.close()

然后尝试循环输入值并添加其中的值:

with open("./stocks/sp500_tickers.csv") as data:
tickers = data.read()
for ticker in tickers:
insert(ticker)

但是当我运行python代码时,我会得到以下错误:

Traceback (most recent call last):
File "fetch.py", line 64, in <module>
insert(ticker)
File "fetch.py", line 23, in insert
cur.execute("INSERT INTO stocks (symbol) VALUES (?)", (symbol,))
sqlite3.IntegrityError: UNIQUE constraint failed: stocks.symbol

如果我这样尝试,也会发生同样的事情:

with open("./stocks/sp500_tickers.csv") as data:
tickers = data.read()
rows = tickers.split('n')
formatted = [tuple(x.split()) for x in rows]
for ticker in tickers:
insert(ticker)

该表的模式为:

id INTEGER NOT NULL, 
symbol VARCHAR, 
name VARCHAR, 
price NUMERIC(10, 2), 
book_value NUMERIC(10, 2), 
trailing_pe NUMERIC(10, 2), 
forward_pe NUMERIC(10, 2), 
trailing_eps NUMERIC(10, 2), 
forward_eps NUMERIC(10, 2), 
dividend_yield NUMERIC(10, 2), 
ma50 NUMERIC(10, 2), 
ma200 NUMERIC(10, 2), 
sector VARCHAR, 
growth_rate NUMERIC(10, 2), 
PRIMARY KEY (id)
);
CREATE INDEX ix_stocks_id ON stocks (id);
CREATE UNIQUE INDEX ix_stocks_symbol ON stocks (symbol);

我的"sp500_ tickers.csv";看起来像这样:

MMM
ABT
ABBV
ABMD
etc

欢迎任何帮助!

来自错误消息

sqlite3.IntegrityError: UNIQUE constraint failed: stocks.symbol

您试图插入到symbol列中的值似乎不是唯一的。为该列定义了一个唯一索引。

CREATE UNIQUE INDEX ix_stocks_symbol ON stocks (symbol);

您应该确保插入的值是唯一的,或者删除唯一的索引。

这个tickers = data.read()使tickers成为一个大字符串。此for ticker in tickers:迭代字符串中的每个字符。如果不是因为这里的for ticker in tickers:打字错误,第二次尝试可以解决这个问题

一旦输入被转换为列表,实际上就没有理由对其进行迭代;这有点违背了executemany的目的:(

最新更新