Thank you, Michael, it was very helpful!

Michael Bayer написав:
> this can be changed but the function still makes no sense.   What if
> you also said "t3 = users.tometadata(metadata,
> schema='SOME_SCHEMA')"  ?   then you would want the "system.users.id"
> FK to be changed.    the tometadata() approach doesn't provide an API
> that can take the use case of variable schema names into account.
>
> Therefore, feel free to implement tometadata() yourself using
> column.copy() and constraint.copy():
>
> def copy_table(table, metadata, schema_map):
>      args = []
>      for c in table.columns:
>          args.append(c.copy())
>      for c in table.constraints:
>          if isinstance(c, ForeignKeyConstraint):
>              elem = list(c.elements)[0]
>              schema = schema_map[elem.column.table.schema]
>          else:
>              schema=None
>          args.append(c.copy(schema=schema))
>      return Table(table.name, metadata,
> schema=schema_map[table.schema], *args)
>
> usage:
>
> m2 = MetaData()
> t2 = copy_table(t, m2, {None:'SOME_SCHEMA', 'system':'system'})
>
> will map tables with no schema to SOME_SCHEMA, tables with "system" to
> the "system" schema.
>
>
> On Jan 20, 2009, at 3:02 PM, sector119 wrote:
>
> >
> > Hi ALL!
> >
> > Does tometadata have to change foreign key schema name if it already
> > specified?
> > For example if I have column 'user_id' with 'system.users.id' FK -
> > tometadata change 'system' schema to SOME_SCHEMA. Is it ok, or
> > tometadata have to set schema to SOME_SCHEMA for street_id,
> > locality_id columns _only_ ?
> >
> > transactions_t = Table('transactions', meta.metadata,
> >                                   Column('id', Integer,
> > primary_key=True, autoincrement=False),
> >                                   Column('user_id', Integer,
> > ForeignKey('system.users.id'), nullable=False),
> >                                   Column('street_id', Integer,
> > ForeignKey('streets.id'), nullable=False),
> >                                   Column('locality_id', Integer,
> > ForeignKey('locality.id'), nullable=False),
> >                                   Column('sum', Integer,
> > nullable=False)
> >                             )
> >
> > transactions_t.tometadata(metadata, schema='SOME_SCHEMA').create()
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to