Использование sqlalchemy для генерации: SELECT * ... INTO OUTFILE "file"; - PullRequest
2 голосов
/ 21 мая 2011

Я недавно начал использовать SQLALCHEMY для запроса базы данных my-sql. Я хочу сгенерировать оператор выбора, который использует синтаксис "INTO OUTFILE <file>" для экспорта результатов запроса в тестовый файл. Например:

SELECT *
FROM table
INTO OUTFILE '/tmp/export.txt';

Есть ли способ сгенерировать предложение "INTO OUTFILE...", используя SQLALCHEMY?

Если нет, могу ли я создать подкласс одного из классов SQLALCHEMY, чтобы я мог сам построить это предложение?

Спасибо.

1 Ответ

3 голосов
/ 22 мая 2011

Я немного подумал и покопался в примерах на сайте SQLAlchemy и выяснил это.(Также отправлено получателям sql-alchemy )


from sqlalchemy import *
from sqlalchemy.sql.expression import Executable, ClauseElement
from sqlalchemy.ext import compiler

class SelectIntoOutfile(Executable, ClauseElement):
    def __init__(self, select, file):
        self.select = select
        self.file = file


@compiler.compiles(SelectIntoOutfile)
def compile(element, compiler, **kw):
    return "%s INTO OUTFILE '%s'" % (
        compiler.process(element.select), element.file
    )


e = SelectIntoOutfile(select([s.dim_date_table]).where(s.dim_date_table.c.Year==2009), '/tmp/test.txt')
print e
eng.execute(e)
...