我正在编写一个工作流程,该工作流程首先将平面csv转换为.db文件以进行下游处理。该文件似乎写正常,但是当我尝试再次读取该文件时,它抛出错误,表明该表不存在。这是我的代码:
import pandas as pd
import sqlite3
# simulate some data
df=pd.DataFrame({'DATE':['01-01-2000','01-02-2000','01-03-2000','01-04-2000','01-05-2000'],
'A1':[1,1,1,1,1],
'A2':[1,2,3,4,5],
'B':[2,2,3,3,2]})
df.to_csv('my_test.csv', index=False)
# function to write csv to .db file
def pandas_csv_to_db_converter(csvfile, table_name):
df = pd.read_csv(csvfile)
conn = sqlite3.connect(table_name)
df.to_sql(table_name, conn, if_exists='append', index=False)
return
pandas_csv_to_db_converter('my_test.csv', 'my_test.db')
到目前为止,我有一个类似大小的csv和.db文件。所以我想读表以确保一切正常。
def pandas_db_reader(db_file):
conn = sqlite3.connect(db_file)
c = conn.cursor()
c.execute("SELECT name FROM sqlite_master WHERE type='table';")
names = [tup[0] for tup in c.fetchall()]
print(names)
table = pd.read_sql_query("SELECT * from {}".format(db_file), conn)
print(table)
conn.close()
return
out_db = 'my_test.db'
pandas_db_reader(out_db)
字符串“ my_test.db”被打印为控制台上的列表中的表,表明它是合法表,但随后的代码引发错误:
cur.execute(*args)
sqlite3.OperationalError: no such table: my_test.db
During handling of the above exception, another exception occurred:
cur.execute(*args)
pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT * from my_test.db': no such table: my_test.db
不是很直观为什么会发生此错误。我看了很多教程,并且对如何执行此操作的堆栈溢出问题似乎没有运行。我没有使用sql的丰富经验,因此任何帮助都将非常有帮助!预先感谢!
编辑:错别字编辑:pandas_csv_to_db_converter('my_test.csv', my_test_db.db)
现在是
pandas_csv_to_db_converter('my_test.csv', 'my_test.db')
答案 0 :(得分:1)
您将db_file
作为表名传递pandas_db_reader()
。您需要将正确的TABLE_NAME
变量传递给下面的SQL查询。
table = pd.read_sql_query("SELECT * from {}".format(TABLE_NAME), conn)
由于任何原因(see here)my_test_db.db
不是有效的表名。在pandas_csv_to_db_converter
和pandas_db_reader
中更改表名称值,即
...
df.to_sql("test", conn, if_exists='append', index=False)
...
和
...
table = pd.read_sql_query("SELECT * from {}".format("test"), conn)
...