Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python将单个.db文件作为数据帧读取_Python_Sql_Sqlite - Fatal编程技术网

python将单个.db文件作为数据帧读取

python将单个.db文件作为数据帧读取,python,sql,sqlite,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'],

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

您正在将
db\u文件作为tablename传递到
pandas\u db\u reader()
。您需要将正确的
TABLE\u NAME
变量传递给下面的SQL查询

table = pd.read_sql_query("SELECT * from {}".format(TABLE_NAME), conn)
出于任何原因()
my_test_db.db
不是有效的表名。将
pandas\u csv\u中的表名值更改为\u db\u转换器
pandas\u db\u读取器
,即

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


我怎样才能知道表名是什么?这基本上就是我所想的,这就是为什么我在“pandas_db_reader”中放了一些行来找出名字——我猜“名字”列表并没有给出我所想的东西!仅供参考,我已经尝试过:c.execute(“SELECT*FROM INFORMATION\u SCHEMA.TABLES”)和c.execute(“SELECT*FROM sys.TABLES”)您的表名在这里定义
pandas\u csv\u to\u db\u converter('my\u test.csv',my\u test\u db.db)
my\u test\u db
对象来自哪里?注意:
my_test_db.db
未作为字符串传递。啊,很抱歉my_test_db.db是stackoverflow上的一个拼写错误,应该是“my_test.db”。我将编辑问题以保持一致性,它在我的程序中是正确的,但仍然无法运行。感谢您的帮助,此测试示例现在可以运行了。我想问题是从“pandas_csv_to_db_converter”开始的,我传递的是完整的文件名。如果我移动到工作目录并从那里运行整个工作流,只使用文件名而不使用完整路径,那么它就可以正常工作了看起来它使用了完整的文件路径作为表名,这就是我无法在“pandas\u db\u reader”中恢复表的原因,或者可能是保存到工作内存中,而不是保存到一个文件中,该文件在函数完成运行后被删除。无论如何,非常感谢!为什么不直接执行pandas.DataFrame.to_sql
?基本上,因为您已经拥有了DataFrame,您可以像这样将它推送到sqlite表中:
engine=sqlalchemy.create_engine('sqlite:///my_db.sqlite“)df.to_sql('Resolved',engine,if_exists='append')
感谢您的帮助,csv来自其他地方,我只是为一个工作示例制作一些测试数据。
...
table = pd.read_sql_query("SELECT * from {}".format("test"), conn)
...