DataFrame.to_sql()

Метод to_sql() сохраняет содержимое DataFrame в таблицу реляционной базы данных. Требует подключения через SQLAlchemy. Удобно для долгосрочного хранения логов с устройств, IoT-телеметрии, результатов экспериментов.

Сигнатура

DataFrame.to_sql(name, con, schema=None, if_exists="fail",
                 index=True, index_label=None, chunksize=None,
                 dtype=None, method=None)

Параметры

  • name — имя таблицы.

  • con — sqlalchemy.Engine или sqlite3.Connection.

  • if_exists — "fail", "replace" или "append".

  • index — записывать ли индекс как столбец.

  • chunksize — размер пачки строк для пакетной вставки.

  • dtype — словарь типов SQL для столбцов.

  • method — None, "multi" или callable для оптимизации вставки.

Возвращаемое значение

Число записанных строк или None (зависит от версии).

Примеры

Пример 1. Запись в SQLite

import pandas as pd
import sqlite3

df = pd.DataFrame({"pin": ["A0", "A1"], "value": [512, 600]})
con = sqlite3.connect("sensors.db")
df.to_sql("readings", con, if_exists="replace", index=False)
con.close()

Пример 2. Через SQLAlchemy и PostgreSQL

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("postgresql://user:pass@localhost/iot")
df = pd.DataFrame({"temp": [23.5, 24.0]})
df.to_sql("temperature", engine, if_exists="append", index=False)

Пример 3. Добавление новых строк

import pandas as pd
import sqlite3

new_data = pd.DataFrame({"pin": ["A2"], "value": [710]})
con = sqlite3.connect("sensors.db")
new_data.to_sql("readings", con, if_exists="append", index=False)
con.close()

Пример 4. Указание типов столбцов

import pandas as pd
import sqlite3
from sqlalchemy.types import Integer, String

df = pd.DataFrame({"pin": ["A0"], "value": [512]})
con = sqlite3.connect("sensors.db")
df.to_sql("readings_typed", con, if_exists="replace",
          dtype={"pin": String(8), "value": Integer()}, index=False)
con.close()

Пример 5. Чтение обратно

import pandas as pd
import sqlite3

con = sqlite3.connect("sensors.db")
df = pd.read_sql("SELECT * FROM readings", con)
print(df)
con.close()
  pin  value
0  A0    512
1  A1    600
2  A2    710

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.