首先我知道有一些这样的问题,我阅读了它们,但它们对我没有用。
我有一些来自金融市场的.csv文件,我想将它们传输到SQLite3数据库表中。为此,我使用了Odo一个 Python 包,但我遇到了一个大错误。
这是样本数据:
EUR/USD,20170102 00:00:01.265,1.0523,1.05307
EUR/USD,20170102 00:00:05.818,1.0523,1.05307
EUR/USD,20170102 00:00:06.833,1.05158,1.05349
让我们一步一步来:所有的 csv 文件和 DB 都在D 盘。我创建了sina DB,然后用这个命令创建了Sina1 表(在 SQLite Studio 中):
CREATE TABLE sina.sina1 (Symbol text, DateTime text, Bid real, Ask real);
然后我尝试使用 Python(Anaconda)通过这段代码输入数据:
[有 2 个 csv 文件。它们都是相同的,但第一个带有标题,第二个没有标题,如 Odo 文档中所做的那样。]
import sqlite3
from odo import odo, discover, resource
# connect to sina database
conn = sqlite3.connect('d:/sina.db')
# use odo to detect the shape and datatype of csv file
data_shape = discover(resource('d:/with_header.csv'))
# Transfer from csv file to table called 'sina1' within database 'sina.db'
odo('d:/parsclick/without_header.csv', 'sqlite:////d:/sina.db::sina1', dshape = data_shape)
# close database
conn.close()
我以不同的方式逐行测试了这段代码。我在这个数据库中创建了一个新表(使用 SQLite studio)并在 python 解释器中使用select命令获取数据,所以它没有连接问题。我手动输入了这种格式的 data_shape(与表相同):
data_shape = "var * {simbole: string, DateTime: string, Bid: float64, Ask: float64}"
这与以下几点不同:
var * {simbole: ?string, DateTime: ?datetime, Bid: float64, Ask: float64}
从第一个代码中获得。
我还将 D 驱动器中所有文件的权限更改为所有人的完全访问权限,并以管理员身份运行计算机(Windows 10)。此外,我检查了路径。但这些并没有改变故事,每次都会导致这个错误:
文件“C:\ProgramData\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py”,第 410 行,在连接中返回 self.dbapi.connect(*cargs, **cparams)
OperationalError:(sqlite3.OperationalError)无法打开数据库文件(此错误的背景:http ://sqlalche.me/e/e3q8 )