old bug, I think its #820.  we generate a bad name in that case.   Try  
using the schema.Index() or schema.DDL() construct for now as a  
workaround (I'm not entirely thrilled about the index=True option on  
Column in general).


On May 24, 2008, at 8:20 PM, Brandon Goldfedder wrote:

>
> Michael,
> Great - that handles the create_all(checkfirst issue)
> Any fix for the ix_ table name taking into account Oracle name limits
> in schema.py?
>
> Thx,
> Brandon
>
> On May 24, 7:37 pm, Michael Bayer <[EMAIL PROTECTED]> wrote:
>> thank you , this was an old ticket #709 and is fixed in r4814 of the
>> 0.4 branch and r4813 of trunk.   remove the usage of "owner", it is
>> synonymous with "schema" (as it is in oracle itself 
>> -http://www.dba-oracle.com/t_schema_components_owner_user.htm
>>   ) , as well as all the other hacks.
>>
>> On May 24, 2008, at 6:34 PM, Brandon Goldfedder wrote:
>>
>>
>>
>>
>>
>>> MIchael,
>>
>>> Thanks for your help on this - I agree I want to get beyond a mess
>>> here regardless if it is 'working' ....
>>
>>> Here are 3 tables that demostrate the issues (with the changes I
>>> needed to do use_alter, modify schema.py, hardcode in schema name to
>>> ForeignKey and tables). I want the model file below to work  
>>> regardless
>>> of the database target (so the schema cram and Oracle target need to
>>> be separated)
>>
>>> The problem is that there is already a table in another schema  
>>> called
>>> 'app_user' and 'facility' so check tables is finding them...
>>
>>> Also - you will note the ForeignKey generates an invalid ix_* index
>>> for Oracle so I needed to modify schema.py until I get around to
>>> setting index=False and manually creating Index'es
>>
>>> #!/usr/bin/env python
>>> #
>>
>>> # Copyright (c) 2008 Digital Innovation, Inc.  All rights reserved.
>>> #
>>> #   The information and source code contained herein is the  
>>> exclusive
>>> property of
>>> #   Digital Innovation Inc (dicorp) and may not be disclosed,
>>> examined, or
>>> #   reproduced in whole or in part without the explicit written
>>> authorization from dicorp.
>>> #
>>> #
>>
>>> from datetime import datetime
>>> from elixir import Entity, Field, OneToMany, ManyToOne, ManyToMany,
>>> has_field, belongs_to
>>> from elixir import options_defaults, using_options, setup_all,
>>> using_table_options
>>> from elixir import String, Unicode, Integer, DateTime, SmallInteger,
>>> Boolean, Text, Binary, Float
>>
>>> options_defaults['table_options'] = {'schema':'cram','owner':'cram'}
>>
>>> from sqlalchemy import Sequence, CheckConstraint, Index,
>>> ForeignKeyConstraint, ForeignKey, schema
>>
>>> class Facility(Entity):
>>>    using_options(tablename='facility')
>>>    #using_table_options(schema='cram',owner='cram')
>>>    control_number = Field(Integer,
>>> Sequence('facility_control_number_seq'), primary_key = True,
>>> autoincrement = True, nullable = False)
>>>    id = Field(String(20), nullable = False)
>>>    name = Field(String(50), nullable = False)
>>>    description = Field(String(255), nullable = True)
>>>    url = Field(String(255), nullable = True)
>>>    type_link = Field(Integer, CheckConstraint('type_link >= 0'),
>>> nullable = False)
>>>    #TODO: UNIQUE Index IdUniqueKey
>>
>>> class PropertyItem(Entity):
>>>    using_options(tablename='property_item')
>>>    #using_table_options(schema='cram',owner='cram')
>>>    control_number = Field(Integer, Sequence('property_item_cn_seq'),
>>> primary_key = True, autoincrement = True, nullable = False)
>>>    created_by = Field(Integer,
>>> ForeignKey('cram.app_user.control_number', name =
>>> 'property_item_created_by_fk', use_alter = False), nullable = True,
>>> index = True)  #Link field for link CreatedBy
>>>    created_when = Field(DateTime, nullable = True)
>>>    modified_by = Field(Integer,
>>> ForeignKey('cram.app_user.control_number', name =
>>> 'property_item_modified_by_fk', use_alter = False), nullable = True,
>>> index = True)  #Link field for link ModifiedBy
>>>    modified_when = Field(DateTime, nullable = True)
>>>    property_profile_link = Field(Integer,
>>> ForeignKey('cram.property_profile.control_number', name =
>>> 'property_item_3_fk', use_alter = False), nullable = False, index =
>>> True)  #Link field for link PropertyProfileLink
>>>    code = Field(String(50), nullable = False)
>>>    description = Field(String(50), nullable = True)
>>>    sort_order = Field(SmallInteger, CheckConstraint('sort_order >=
>>> 0'), nullable = True)
>>>    disabled = Field(Boolean, nullable = True)
>>
>>> class PropertyProfile(Entity):
>>>    using_options(tablename='property_profile')
>>>    #using_table_options(schema='cram',owner='cram')
>>>    control_number = Field(Integer,
>>> Sequence('property_profile_cn_seq'), primary_key = True,  
>>> autoincrement
>>> = True, nullable = False)
>>>    primary_facility_link = Field(Integer,
>>> ForeignKey('cram.facility.control_number', name =
>>> 'property_profile_1_fk', use_alter = False), nullable = True,  
>>> index =
>>> True)  #Link field for link PrimaryFacilityLink
>>>    created_by = Field(Integer,
>>> ForeignKey('cram.app_user.control_number', name =
>>> 'property_profile_created_by_fk', use_alter = False), nullable =  
>>> True,
>>> index = True)  #Link field for link CreatedBy
>>>    created_when = Field(DateTime, nullable = True)
>>>    modified_by = Field(Integer,
>>> ForeignKey('cram.app_user.control_number', name =
>>> 'property_profile_3_fk', use_alter = False), nullable = True,  
>>> index =
>>> True)  #Link field for link ModifiedBy
>>>    modified_when = Field(DateTime, nullable = True)
>>>    name = Field(String(50), nullable = False)
>>>    description = Field(String(255), nullable = True)
>>>    active = Field(Boolean, nullable = True)
>>
>>> class AppUser(Entity):
>>>    using_options(tablename='app_user')
>>>    #using_table_options(schema='cram',owner='cram')
>>>    control_number = Field(Integer,
>>> Sequence('app_user_control_number_seq'), primary_key = True,
>>> autoincrement = True, nullable = False)
>>>    primary_facility_link = Field(Integer,
>>> ForeignKey('cram.facility.control_number', name = 'app_user_1_fk',
>>> use_alter = False), nullable = True, index = True)  #Link field for
>>> link PrimaryFacilityLink
>>>    id = Field(String(20), nullable = False)
>>>    name = Field(String(50), nullable = False)
>>>    description = Field(String(255), nullable = True)
>>>    url = Field(String(255), nullable = True)
>>>    email_address = Field(String(255), nullable = True)
>>>    expiration_date = Field(DateTime, nullable = True)
>>>    password = Field(String(40), nullable = False)
>>>    disabled = Field(Boolean, nullable = True)
>>>    #TODO: UNIQUE Index IdUniqueKey
>>
>>> setup_all()
>>> create_all(checkfirst=False)
>>
>>> On May 24, 9:57 am, Michael Bayer <[EMAIL PROTECTED]> wrote:
>>>> On May 23, 2008, at 10:02 PM, Brandon Goldfedder wrote:
>>
>>>>> Michael,
>>>>> Yes - that is what I am doing now :
>>>>> ForeignKey("schemaname.tablename.colname")
>>
>>>>> and I have things working. (see example 3).
>>>>> My problem is these steps
>>>>> seem really ugly and a lot more work than it should be to get  
>>>>> things
>>>>> working portably and reliably - thus my question on if this is  
>>>>> best
>>>>> practice or not.
>>
>>>> no, what you had there is crazy.  send an example case (just the
>>>> plain
>>>> tables and their relationships, none of the "extra" stuff you  
>>>> did) so
>>>> we can fully see what you'd like to achieve.- Hide quoted text -
>>
>> - Show quoted text -
> >


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to