python读取单个.db文件作为pandas数据框

时间:2019-06-24 13:06:54

标签: python sql sqlite

我正在编写一个工作流程,该工作流程首先将平面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')

1 个答案:

答案 0 :(得分:1)

您将db_file作为表名传递pandas_db_reader()。您需要将正确的TABLE_NAME变量传递给下面的SQL查询。

table = pd.read_sql_query("SELECT * from {}".format(TABLE_NAME), conn)

由于任何原因(see heremy_test_db.db不是有效的表名。在pandas_csv_to_db_converterpandas_db_reader中更改表名称值,即

...
df.to_sql("test", conn, if_exists='append', index=False)
...

...
table = pd.read_sql_query("SELECT * from {}".format("test"), conn)
...