Мне больше нравится, когда можно и ORM и вручную запросы писать. В python, например, есть отличная либа sqlalchemy, там можно использовать orm, sqlalchemy core(что-то среднее) и писать запросы вручную(но sqlalchemy синхронный и это минус). Обычно вручную пишут для оптимизации или каких-то не тривиальных штук, вроде построения гистограммы.
Если вы это делаете, можете привести пример кода?
users = await connection.fetch('''
SELECT * FROM core_user
WHERE is_updated = true and last_update_timestamp <= $1 - updating_period LIMIT $2
''', int(time.time()), settings.BOT_CONCURRENT_TASKS)
Как вы потом работаете со строками, просто как со словарями?
Да
user['password']
, есть либы, которые позволяют обращаться так
user.password
Как вы защищаетесь от опечаток в названии столбцов таблицы?
Так ошибка ж будет.
Или вот пример, не представляю, как сделать с ORM
sql_request = '''
WITH stats AS (
SELECT MIN(:field_name) as min_value, MAX(:field_name) as max_value
FROM :table_name
)
SELECT
width_bucket(:field_name, min_value, max_value, :window_size) as bucket,
MIN(:field_name) as x,
COUNT(*) AS y
FROM
:table_name, stats
GROUP BY
bucket
ORDER BY
bucket;
'''.replace(':field_name', field_name)\
.replace(':table_name', table_name)\
.replace(':window_size', str(window_size))
items = await asyncpgsa.pg.fetch(sql_request, *sql_arguments)
return [PostgreSQLSerializer(['x', 'y']).serialize(item) for item in items if item['y'] != 0]