Records es una biblioteca muy simple pero poderosa para realizar consultas SQL sin formato a la mayoría de las bases de datos relacionales.
Simplemente escribe SQL. Sin campanas, sin silbatos. Esta tarea común puede resultar sorprendentemente difícil con las herramientas estándar disponibles. Esta biblioteca se esfuerza por hacer que este flujo de trabajo sea lo más simple posible, al tiempo que proporciona una interfaz elegante para trabajar con los resultados de su consulta.
El soporte de bases de datos incluye RedShift, Postgres, MySQL, SQLite, Oracle y MS-SQL (controladores no incluidos).
Sabemos cómo escribir SQL, así que enviemos algo a nuestra base de datos:
import records
db = records . Database ( 'postgres://...' )
rows = db . query ( 'select * from active_users' ) # or db.query_file('sqls/active-users.sql')
Tome una fila a la vez:
> >> rows [ 0 ]
< Record { "username" : "model-t" , "active" : true , "name" : "Henry Ford" , "user_email" : "[email protected]" , "timezone" : "2016-02-06 22:28:23.894202" } >
O iterar sobre ellos:
for r in rows :
print ( r . name , r . user_email )
Se puede acceder a los valores de muchas maneras: row.user_email
, row['user_email']
o row[3]
.
Los campos con caracteres no alfanuméricos (como espacios) también son totalmente compatibles.
O guarde una copia de su colección de registros para consultarla en el futuro:
> >> rows . all ()
[ < Record { "username" : ...} > , < Record { "username" : ...} > , < Record { "username" : ...} > , ...]
Si solo esperas un resultado:
> >> rows . first ()
< Record { "username" : ...} >
Otras opciones incluyen rows.as_dict()
y rows.as_dict(ordered=True)
.
$DATABASE_URL
.Database.get_table_names
.Database.query('life=:everything', everything=42)
.t = Database.transaction(); t.commit()
.Database.bulk_query()
y Database.bulk_query_file()
.Records se enorgullece de funcionar con SQLAlchemy y Tablib.
Records también presenta integración completa con Tablib y le permite exportar sus resultados a CSV, XLS, JSON, tablas HTML, YAML o Pandas DataFrames con una sola línea de código. Excelente para compartir datos con amigos o generar informes.
>>> print (rows.dataset)
username|active|name |user_email |timezone
--------|------|----------|-----------------|--------------------------
model-t |True |Henry Ford|[email protected]|2016-02-06 22:28:23.894202
...
Valores separados por comas (CSV)
>>> print (rows.export( ' csv ' ))
username,active,name,user_email,timezone
model-t,True,Henry Ford,[email protected],2016-02-06 22:28:23.894202
...
YAML no es lenguaje de marcado (YAML)
> >> print ( rows . export ( 'yaml' ))
- { active : true , name : Henry Ford , timezone : '2016-02-06 22:28:23.894202' , user_email : model - t @ gmail . com , username : model - t }
...
Notación de objetos JavaScript (JSON)
> >> print ( rows . export ( 'json' ))
[{ "username" : "model-t" , "active" : true , "name" : "Henry Ford" , "user_email" : "[email protected]" , "timezone" : "2016-02-06 22:28:23.894202" }, ...]
Microsoft Excel (xls, xlsx)
with open ( 'report.xls' , 'wb' ) as f :
f . write ( rows . export ( 'xls' ))
Marco de datos de Pandas
> >> rows . export ( 'df' )
username active name user_email timezone
0 model - t True Henry Ford model - t @ gmail . com 2016 - 02 - 06 22 : 28 : 23.894202
Entiendes el punto. Todas las demás funciones de Tablib también están disponibles, por lo que puede ordenar resultados, agregar/eliminar columnas/filas, eliminar duplicados, transponer la tabla, agregar separadores, dividir datos por columna y más.
Consulte la documentación de Tablib para obtener más detalles.
Por supuesto, el método de instalación recomendado es pipenv:
$ pipenv install records[pandas]
?
¡Gracias por consultar esta biblioteca! Espero que te resulte útil.
Por supuesto, siempre hay margen de mejora. No dudes en abrir una incidencia para que podamos hacer que Records sea mejor, más potente y más rápido.