pandas.DataFrame.to_sql
-
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)[source] -
Запись записей, хранящихся в DataFrame, в базу данных SQL.
Поддерживаются базы данных, поддерживаемые SQLAlchemy [1]. Таблицы могут быть созданы заново, добавлены или перезаписаны.
Параметры: -
name : string -
Имя таблицы SQL.
-
con : sqlalchemy.engine.Engine or sqlite3.Connection -
Использование SQLAlchemy позволяет использовать любую базу данных, поддерживаемую этой библиотекой. Предоставляется поддержка устаревшей поддержки для объектов sqlite3.Connection.
-
schema : string, optional -
Укажите схему (если это поддерживает тип базы данных). Если None, используется схема по умолчанию.
-
if_exists : {‘fail’, ‘replace’, ‘append’}, default ‘fail’ -
Как себя вести, если таблица уже существует.
- fail: Вызвать ValueError.
- replace: Удалить таблицу перед вставкой новых значений.
- append: Добавить новые значения в существующую таблицу.
-
index : bool, default True -
Записать индекс DataFrame как столбец. Использует
index_labelв качестве имени столбца в таблице. -
index_label : string or sequence, default None -
Имя метки столбца для столбца(ов) индекса. Если задано None (по умолчанию) и
indexравно True, используются имена индексов. Следует указать последовательность, если DataFrame использует MultiIndex. -
chunksize : int, optional -
Строки будут записываться партиями этого размера за раз. По умолчанию все строки записываются сразу.
-
dtype : dict, optional -
Указание типа данных для столбцов. Ключи должны быть именами столбцов, а значения — типами SQLAlchemy или строками для устаревшего режима sqlite3.
-
method : {None, ‘multi’, callable}, default None -
Управляет используемой SQL-командой вставки:
- None : Использует стандартную SQL
INSERTкоманду (одна на строку). - ‘multi’: Передает несколько значений в одной
INSERTкоманде. - вызываемая функция со сигнатурой
(pd_table, conn, keys, data_iter).
Подробности и пример реализации вызываемой функции можно найти в разделе метода вставки.
Введено в версии 0.24.0.
- None : Использует стандартную SQL
Возбуждает: - ValueError
-
Когда таблица уже существует, и
if_existsравно ‘fail’ (по умолчанию).
См. также
-
read_sql - Чтение DataFrame из таблицы.
Примечания
Осведомленные о часовых поясах столбцы datetime будут записаны как
Timestamp with timezoneтип с SQLAlchemy, если это поддерживается базой данных. В противном случае даты и время будут храниться как даты и время без учета часовых поясов, локальные для исходного часового пояса.Введено в версии 0.24.0.
Ссылки
[1] (1, 2) http://docs.sqlalchemy.org [2] https://www.python.org/dev/peps/pep-0249/ Примеры
Создание временной базы данных SQLite.
>>> from sqlalchemy import create_engine >>> engine = create_engine('sqlite://', echo=False)Создание таблицы с нуля с 3 строками.
>>> df = pd.DataFrame({'name' : ['User 1', 'User 2', 'User 3']}) >>> df name 0 User 1 1 User 2 2 User 3>>> df.to_sql('users', con=engine) >>> engine.execute("SELECT * FROM users").fetchall() [(0, 'User 1'), (1, 'User 2'), (2, 'User 3')]>>> df1 = pd.DataFrame({'name' : ['User 4', 'User 5']}) >>> df1.to_sql('users', con=engine, if_exists='append') >>> engine.execute("SELECT * FROM users").fetchall() [(0, 'User 1'), (1, 'User 2'), (2, 'User 3'), (0, 'User 4'), (1, 'User 5')]Перезапись таблицы только с
df1.>>> df1.to_sql('users', con=engine, if_exists='replace', ... index_label='id') >>> engine.execute("SELECT * FROM users").fetchall() [(0, 'User 4'), (1, 'User 5')]Укажите тип данных (особенно полезно для целых чисел с пропущенными значениями). Обратите внимание, что, хотя pandas вынужден хранить данные как числа с плавающей точкой, база данных поддерживает целые числа с возможными пропущенными значениями. При получении данных с помощью Python мы получаем скаляры целых чисел.
>>> df = pd.DataFrame({"A": [1, None, 2]}) >>> df A 0 1.0 1 NaN 2 2.0>>> from sqlalchemy.types import Integer >>> df.to_sql('integers', con=engine, index=False, ... dtype={"A": Integer()})>>> engine.execute("SELECT * FROM integers").fetchall() [(1,), (None,), (2,)] -
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.24.2/reference/api/pandas.DataFrame.to_sql.html