#mysql #sqlalchemy #into-outfile
#mysql #sqlalchemy #into-outfile
Вопрос:
Недавно я начал использовать SQLALCHEMY для запроса базы данных my-sql. Я хочу сгенерировать оператор select, который использует синтаксис « INTO OUTFILE <file>
» для экспорта результатов запроса в тестовый файл. Например:
SELECT *
FROM table
INTO OUTFILE '/tmp/export.txt';
Есть ли способ сгенерировать предложение « INTO OUTFILE...
» с помощью SQLALCHEMY?
Если нет, могу ли я создать подкласс одного из классов SQLALCHEMY, чтобы я мог создать это предложение самостоятельно?
Спасибо.
Ответ №1:
Я немного подумал и покопался в примерах на сайте 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)