Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Апрель 13, 2007 16:23:08

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

Можно ли как-то осуществить SUBJ?

То есть выбрать не все столбцы из таблицы, а тока некоторые. В идеале еще задать им имя…

А то использую двойной JOIN, он притягивает кучу “ненужных” полей :-)

ЗЫ Может по ORM/DB нужна отдельная ветка?



Офлайн

#2 Апрель 13, 2007 16:31:50

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

cleg
Можно ли как-то осуществить SUBJ?

То есть выбрать не все столбцы из таблицы, а тока некоторые. В идеале еще задать им имя…
Можно. Вместо указания таблицы из которой выбирать, можно указать столбцы: select()



Офлайн

#3 Апрель 13, 2007 16:48:31

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

пожалуй уточню

модель…

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()
как “отфильтровать” столбцы в данном случае?



Офлайн

#4 Апрель 13, 2007 16:55:54

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

сам и отвечу :-) сделал так:

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)

Офлайн

#5 Апрель 13, 2007 17:33:04

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

следующий вопрос:

можно ли “переключить” базу “налету”?

то есть я подключаюсь к одной базе, делаю из нее выборку, потом надо подключится к другой базе с такой же структурой и в нее данные занести.

что для этого надо сделать? просто сделать по-новой BoundMetaData - недостаточно.
или это невозможно вообще?



Офлайн

#6 Апрель 14, 2007 09:03:37

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

cleg
что для этого надо сделать? просто сделать по-новой BoundMetaData - недостаточно.
или это невозможно вообще?
Делаешь BoundMetaData для каждой базы и используешь их.



Офлайн

#7 Апрель 16, 2007 09:42:55

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

че=та я торможу…
а если у меня таблица уже создана с одной metadata, как ее переключить на другую???



Офлайн

#8 Апрель 16, 2007 13:27:40

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

Можно заново создать таблицу, используя autoload или попробовать сделать это с использованием global_connect. В последнем слечае при создании таблицы явно указывать metadata не требуется. Также можно использовать метод таблицы tometadata.
http://www.sqlalchemy.org/docs/metadata.html



Офлайн

#9 Май 10, 2007 12:40:51

ods
От:
Зарегистрирован: 2007-03-03
Сообщения: 47
Репутация: +  0  -
Профиль   Отправить e-mail  

SELECT с выбором столбцов в SQLAlchemy

Проще всего с DynamicMetaData: таблицы определяются один раз, в при выполнении операций указывается соединение (engine в терминах SQLAlchemy).



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version