Оказывается, это просто:
from sqlalchemy.dialects import postgresql
from sqlalchemy.schema import CreateTable
from sqlalchemy import Table, Column, String, MetaData
metadata = MetaData()
users = Table('users', metadata,
Column('username', String)
)
statement = CreateTable(users)
print(statement.compile(dialect=postgresql.dialect()))
Выводит это:
CREATE TABLE users (
username VARCHAR
)
Если пойти дальше, он может даже поддерживать связанные параметры в подготовленных выражениях.
Ссылка
Как отобразить выражения SQL в виде строк, возможно, со встроенными связанными параметрами?
...
или без двигателя:
from sqlalchemy.dialects import postgresql
print(statement.compile(dialect=postgresql.dialect()))
ИСТОЧНИК: http://docs.sqlalchemy.org/en/latest/faq/sqlexpressions.html#faq-sql-expression-string
Пример: использование SQL Alchemy для генерации сценария переименования пользователя
#!/usr/bin/env python
import csv
from sqlalchemy.dialects import postgresql
from sqlalchemy import bindparam, Table, Column, String, MetaData
metadata = MetaData()
users = Table('users', metadata,
Column('username', String)
)
renames = []
with open('users.csv') as csvfile:
for row in csv.DictReader(csvfile):
renames.append({
'from': row['sAMAccountName'],
'to': row['mail']
})
for rename in renames:
stmt = (users.update()
.where(users.c.username == rename['from'])
.values(username=rename['to']))
print(str(stmt.compile(dialect=postgresql.dialect(),
compile_kwargs={"literal_binds": True})) + ';')
При обработке этого users.csv:
sAMAccountName,mail
bmcboatface,boaty.mcboatface@example.com
ndhyani,naina.dhyani@contoso.com
Дает вывод, как это:
UPDATE users SET username='boaty.mcboatface@example.com' WHERE users.username = 'bmcboatface';
UPDATE users SET username='naina.dhyani@contoso.com' WHERE users.username = 'ndhyani';users.username = 'ndhyani';
Почему у исследовательского судна есть адрес электронной почты, еще предстоит определить. Я связывался с ИТ-командой Example Inc и не получил ответа.