Records — очень простая, но мощная библиотека для выполнения необработанных SQL-запросов к большинству реляционных баз данных.
Просто напишите SQL. Никаких звонков, никаких свистков. Эта обычная задача может оказаться на удивление сложной при наличии стандартных инструментов. Эта библиотека стремится максимально упростить этот рабочий процесс, обеспечивая при этом элегантный интерфейс для работы с результатами ваших запросов.
Поддержка баз данных включает RedShift, Postgres, MySQL, SQLite, Oracle и MS-SQL (драйверы в комплект не входят).
Мы знаем, как писать SQL, поэтому давайте отправим его в нашу базу данных:
import records
db = records . Database ( 'postgres://...' )
rows = db . query ( 'select * from active_users' ) # or db.query_file('sqls/active-users.sql')
Возьмите одну строку за раз:
> >> rows [ 0 ]
< Record { "username" : "model-t" , "active" : true , "name" : "Henry Ford" , "user_email" : "[email protected]" , "timezone" : "2016-02-06 22:28:23.894202" } >
Или переберите их:
for r in rows :
print ( r . name , r . user_email )
Доступ к значениям можно получить разными способами: row.user_email
, row['user_email']
или row[3]
.
Поля с небуквенно-цифровыми символами (например, пробелами) также полностью поддерживаются.
Или сохраните копию своей коллекции записей для дальнейшего использования:
> >> rows . all ()
[ < Record { "username" : ...} > , < Record { "username" : ...} > , < Record { "username" : ...} > , ...]
Если вы ожидаете только одного результата:
> >> rows . first ()
< Record { "username" : ...} >
Другие параметры включают rows.as_dict()
и 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()
и Database.bulk_query_file()
.Records работает на базе SQLAlchemy и Tablib.
Records также имеет полную интеграцию с Tablib и позволяет экспортировать результаты в CSV, XLS, JSON, HTML-таблицы, YAML или Pandas DataFrames с помощью одной строки кода. Отлично подходит для обмена данными с друзьями или создания отчетов.
>>> print (rows.dataset)
username|active|name |user_email |timezone
--------|------|----------|-----------------|--------------------------
model-t |True |Henry Ford|[email protected]|2016-02-06 22:28:23.894202
...
Значения, разделенные запятыми (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 не является языком разметки (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 }
...
Нотация объектов 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' ))
Панды DataFrame
> >> 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
Вы поняли суть. Также доступны все другие функции Tablib: вы можете сортировать результаты, добавлять/удалять столбцы/строки, удалять дубликаты, транспонировать таблицу, добавлять разделители, разбивать данные по столбцам и многое другое.
Дополнительную информацию см. в документации Tablib.
Конечно, рекомендуемый метод установки — Pipenv:
$ pipenv install records[pandas]
?
Спасибо, что проверили эту библиотеку! Надеюсь, вы найдете это полезным.
Конечно, всегда есть куда совершенствоваться. Не стесняйтесь открывать проблему, чтобы мы могли сделать Records лучше, сильнее и быстрее.