Как открыть и преобразовать базу данных sqlite в pandas dataframe

Я загрузил некоторые данные в виде базы данных sqlite (data.db), и я хочу открыть эту базу данных на python, а затем преобразовать ее в pandas dataframe.

Это до сих пор я сделал

import sqlite3
import pandas    
dat = sqlite3.connect('data.db') #connected to database with out error
pandas.DataFrame.from_records(dat, index=None, exclude=None, columns=None, coerce_float=False, nrows=None)

Но его выброс этой ошибки

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 980, in from_records
    coerce_float=coerce_float)
  File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 5353, in _to_arrays
    if not len(data):
TypeError: object of type 'sqlite3.Connection' has no len()

Как преобразовать базу данных sqlite в pandas dataframe

Ответ 1

Несмотря на то, что sqlite является частью стандартной библиотеки Python и представляет собой удобный и удобный интерфейс для баз данных SQLite, в руководстве Pandas говорится:

Примечание. Чтобы использовать read_sql_table(), необходимо иметь SQLAlchemy. необязательная зависимость установлена. http://pandas.pydata.org/pandas-docs/stable/io.html#reading-tables

Но Pandas по-прежнему поддерживает доступ к sqlite3, если вы хотите избежать установки SQLAlchemy:

import sqlite3
import pandas as pd
# Create your connection.
cnx = sqlite3.connect('file.db')

df = pd.read_sql_query("SELECT * FROM table_name", cnx)

Но вы должны знать название используемой таблицы заранее.

Надеюсь, это поможет!

http://pandas.pydata.org/pandas-docs/stable/io.html#sqlite-fallback

Ответ 2

Линия

data = sqlite3.connect('data.db')

открывает соединение с базой данных. Нет записей, запрошенных до этого. Поэтому вам нужно выполнить запрос и предоставить его конструктору pandas DataFrame.

Это должно выглядеть примерно так

import sqlite3
import pandas as pd

dat = sqlite3.connect('data.db')
query = dat.execute("SELECT * From <TABLENAME>")
cols = [column[0] for column in query.description]
results= pd.DataFrame.from_records(data = query.fetchall(), columns = cols)

Я не очень разбираюсь в командах SQL, поэтому вам следует проверить правильность запроса. должно быть имя таблицы в вашей базе данных.

Ответ 3

Поиск sqlalchemy, engine и имя базы данных в google (в этом случае sqlite):

import pandas as pd
import sqlalchemy

db_name = "data.db"
table_name = "LITTLE_BOBBY_TABLES"

engine = sqlalchemy.create_engine("sqlite:///%s" % db_name, execution_options={"sqlite_raw_colnames": True})
df = pd.read_sql_table(table_name, engine)

Ответ 4

Я сохранил свои данные в файле database.sqlite table is Reviews

import sqlite3
con=sqlite3.connect("database.sqlite")

data=pd.read_sql_query("SELECT * FROM Reviews",con)
print(data)