Escriba los registros almacenados en un DataFrame en una base de datos SQL.
Bases de datos compatibles con SQLAlchemy [1] son compatibles. Las tablas se pueden crear, anexar o sobrescribir.
- Parámetros
-
- nombre : str
-
Nombre de la tabla SQL.
- estafa : sqlalchemy.engine. (Motor o Conexión) o sqlite3.Connection
-
El uso de SQLAlchemy hace posible utilizar cualquier base de datos compatible con esa biblioteca. Se proporciona soporte heredado para objetos sqlite3.Connection. El usuario es responsable de la eliminación del motor y el cierre de la conexión del conector SQLAlchemy. Consulte aquí.
- esquema : str, opcional
-
Especifique el esquema (si el tipo de base de datos lo admite). Si es Ninguno, use el esquema predeterminado.
- if_exists : ‘fallar’, ‘reemplazar’, ‘agregar’, predeterminado ‘fallar’
-
Cómo comportarse si la tabla ya existe.
-
fail: genera un ValueError.
-
reemplazar: elimine la tabla antes de insertar nuevos valores.
-
añadir: inserta nuevos valores en la tabla existente.
- índice : bool, por defecto Verdadero
-
Escriba el índice de DataFrame como una columna. Usos index_label como el nombre de la columna en la tabla.
- index_label : str o secuencia, por defecto Ninguno
-
Etiqueta de columna para la (s) columna (s) de índice. Si se proporciona Ninguno (predeterminado) y índice es Verdadero, entonces se utilizan los nombres de índice. Se debe dar una secuencia si el DataFrame usa MultiIndex.
- tamaño de porción : int, opcional
-
Especifique el número de filas de cada lote que se escribirán a la vez. De forma predeterminada, todas las filas se escribirán a la vez.
- dtype : dict o escalar, opcional
-
Especificar el tipo de datos de las columnas. Si se utiliza un diccionario, el keys deben ser los nombres de las columnas y los valores deben ser los tipos o cadenas de SQLAlchemy para el modo heredado sqlite3. Si se proporciona un escalar, se aplicará a todas las columnas.
- método : Ninguno, ‘multi’, invocable, opcional
-
Controla la cláusula de inserción de SQL utilizada:
-
Ninguno: utiliza SQL estándar INSERT
cláusula (una por fila).
-
‘multi’: pasa varios valores en un solo INSERT
cláusula.
-
invocable con firma (pd_table,conn,keys,data_iter)
.
Los detalles y una implementación de muestra que se puede llamar se pueden encontrar en la sección método de inserción.
Nuevo en la versión 0.24.0.
- Eleva
-
- ValueError
-
Cuando la mesa ya existe y if_exists es ‘fail’ (el predeterminado).
Ver también
read_sql
-
Leer un DataFrame de una tabla.
Notas
Las columnas de fecha y hora conscientes de la zona horaria se escribirán como Timestampwithtimezone
escriba con SQLAlchemy si lo admite la base de datos. De lo contrario, las fechas y horas se almacenarán como marcas de tiempo inconscientes de la zona horaria local a la zona horaria original.
Nuevo en la versión 0.24.0.
Referencias
- 1
-
https://docs.sqlalchemy.org
- 2
-
https://www.python.org/dev/peps/pep-0249/
Ejemplos de
Cree una base de datos SQLite en memoria.
>>>from sqlalchemy import create_engine
>>> engine = create_engine('sqlite://', echo=False)
Crea una tabla desde cero con 3 filas.
>>> df = pd.DataFrame('name':['User 1','User 2','User 3'])>>> df
name
0 User 11 User 22 User 3
>>> df.to_sql('users', con=engine)>>> engine.execute("SELECT * FROM users").fetchall()[(0,'User 1'),(1,'User 2'),(2,'User 3')]
Un sqlalchemy.engine.Connection también se puede pasar a estafa:
>>>with engine.begin()as connection:... df1 = pd.DataFrame('name':['User 4','User 5'])... df1.to_sql('users', con=connection, if_exists='append')
Esto está permitido para admitir operaciones que requieren que se utilice la misma conexión DBAPI para toda la operación.
>>> df2 = pd.DataFrame('name':['User 6','User 7'])>>> df2.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'),(0,'User 6'),(1,'User 7')]
Sobrescriba la tabla con solo df2
.
>>> df2.to_sql('users', con=engine, if_exists='replace',... index_label='id')>>> engine.execute("SELECT * FROM users").fetchall()[(0,'User 6'),(1,'User 7')]
Especifique el tipo d (especialmente útil para enteros con valores perdidos). Tenga en cuenta que mientras que los pandas se ven obligados a almacenar los datos como punto flotante, la base de datos admite enteros que aceptan valores NULL. Cuando recuperamos los datos con Python, obtenemos escalares enteros.
>>> df = pd.DataFrame("A":[1,None,2])>>> df
A
01.01 NaN
22.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,)]