Python читает один файл .db в качестве фрейма данных pandas - PullRequest
1 голос
/ 24 июня 2019

Я пишу рабочий процесс, который сначала преобразует плоский 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 Ответ

1 голос
/ 24 июня 2019

Вы передаете db_file в качестве имени таблицы в pandas_db_reader().Вам необходимо передать правильную переменную TABLE_NAME в SQL-запрос ниже.

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

По любой причине ( см. Здесь ) 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)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...