Форум сайта python.su
Можно ли как-то осуществить SUBJ?
То есть выбрать не все столбцы из таблицы, а тока некоторые. В идеале еще задать им имя…
А то использую двойной JOIN, он притягивает кучу “ненужных” полей :-)
ЗЫ Может по ORM/DB нужна отдельная ветка?
Офлайн
clegМожно. Вместо указания таблицы из которой выбирать, можно указать столбцы: select()
Можно ли как-то осуществить SUBJ?
То есть выбрать не все столбцы из таблицы, а тока некоторые. В идеале еще задать им имя…
Офлайн
пожалуй уточню
модель…
commands = Table('commands', metadata,
Column('cmd_id', Integer, primary_key=True),
Column('for_whom', String(30)),
Column('action', String(20), nullable=False)
)
computers = Table('cli_comps', metadata,
Column('comp_id', Integer, primary_key=True),
Column('ip_addr', String(15), nullable=False)
)
tasks = Table('tasks', metadata,
Column('task_id', Integer, primary_key=True),
Column('comp_id', Integer, ForeignKey('cli_comps.comp_id')),
Column('cmd_id', Integer, ForeignKey('commands.cmd_id')),
Column('completed', Boolean)
)
joins = tasks.join(computers).join(commands)
res = joins.select(computers.c.ip_addr == 'x.x.x.x').execute()
Офлайн
сам и отвечу :-) сделал так:
joins = tasks.join(computers).join(commands)
result = select([commands.c.action, computers.c.ip_addr, tasks.c.completed], computers.c.ip_addr == 'x.x.x.x', from_obj=[joins]).execute()
Отредактировано (Апрель 13, 2007 16:56:57)
Офлайн
следующий вопрос:
можно ли “переключить” базу “налету”?
то есть я подключаюсь к одной базе, делаю из нее выборку, потом надо подключится к другой базе с такой же структурой и в нее данные занести.
что для этого надо сделать? просто сделать по-новой BoundMetaData - недостаточно.
или это невозможно вообще?
Офлайн
clegДелаешь BoundMetaData для каждой базы и используешь их.
что для этого надо сделать? просто сделать по-новой BoundMetaData - недостаточно.
или это невозможно вообще?
Офлайн
че=та я торможу…
а если у меня таблица уже создана с одной metadata, как ее переключить на другую???
Офлайн
Можно заново создать таблицу, используя autoload или попробовать сделать это с использованием global_connect. В последнем слечае при создании таблицы явно указывать metadata не требуется. Также можно использовать метод таблицы tometadata.
http://www.sqlalchemy.org/docs/metadata.html
Офлайн
Проще всего с DynamicMetaData: таблицы определяются один раз, в при выполнении операций указывается соединение (engine в терминах SQLAlchemy).
Офлайн