9 messages in com.googlegroups.sqlalchemy[sqlalchemy] Re: Problems with Oracle...| From | Sent On | Attachments |
|---|---|---|
| Brandon Goldfedder | 23 May 2008 12:09 | |
| Brandon Goldfedder | 23 May 2008 14:21 | |
| Michael Bayer | 23 May 2008 16:55 | |
| Brandon Goldfedder | 23 May 2008 19:02 | |
| Michael Bayer | 24 May 2008 06:57 | |
| Brandon Goldfedder | 24 May 2008 15:33 | |
| Michael Bayer | 24 May 2008 16:36 | |
| Brandon Goldfedder | 24 May 2008 17:20 | |
| Michael Bayer | 24 May 2008 19:40 |
| Subject: | [sqlalchemy] Re: Problems with Oracle Express/sqlalchemy![]() |
|---|---|
| From: | Michael Bayer (mike...@zzzcomputing.com) |
| Date: | 05/24/2008 04:36:49 PM |
| List: | com.googlegroups.sqlalchemy |
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 <mike...@zzzcomputing.com> 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.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to sqla...@googlegroups.com
To unsubscribe from this group, send email to
sqla...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---




