Spec-Zone.ru › pandas 0.24

pandas.Series.to_sql

Series.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.

Возбуждает:
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 вынужден хранить данные как числа с плавающей точкой, база данных поддерживает целые числа со значениями NULL. При извлечении данных с помощью 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.Series.to_sql.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API