I think I see my biggest issue now. I thought that I needed multiple 
`declarative_base` for each database but I can use the same one for all 
models and specify schema.

On Wednesday, March 20, 2019 at 1:02:47 PM UTC-4, mkwyche wrote:
>
> Here's the code I'm using to create `declarative_base`:
>
> ```
>
> PHIL_DATA = "phil_data"
> PHIL_DATA3 = "phil_data3"
> MESA = "mesa"
> SQL_DEBUG = bool(os.getenv("SQL_DEBUG", False))
> _ENGINE_PHIL_DATA = get_mysql_engine(database=PHIL_DATA, echo=SQL_DEBUG)
> _ENGINE_PHIL_DATA3 = get_mysql_engine(database=PHIL_DATA3, echo=SQL_DEBUG)
> _ENGINE_MESA = get_mysql_engine(database=MESA, echo=SQL_DEBUG)
>
> # Set up base contstants
> PHIL_DATA3_BASE = declarative_base(bind=_ENGINE_PHIL_DATA3.connect())
> PHIL_DATA_BASE = declarative_base(bind=_ENGINE_PHIL_DATA.connect())
> MESA_BASE = declarative_base(bind=_ENGINE_MESA.connect())
> ```
>
> That base is then used to create their models:
>
> ```
>
> class PlayerPro(MESA_BASE):
>     ''' player_pro model '''
>     __tablename__ = "player_pro"
>
>     # Primary Keys
>     ebis_id = Column(MEDIUMINT(9), primary_key=True)
>     bam_id = Column(MEDIUMINT(9), index=True)
>     phil_id = Column(MEDIUMINT(9), index=True)
>
>
>
> class EvalProHit(PHIL_DATA_BASE):
>     ''' Eval Pro Hit model '''
>     __tablename__ = "eval_pro_hit"
>
>     def list_id_default(self):  # pylint: disable=no-self-use
>         return uuid.uuid4().hex
>
>     # Keys
>     eval_id = Column(VARCHAR(255), primary_key=True, default=list_id_default)
>     phil_id = Column(MEDIUMINT(9), nullable=False)
>
>     ForeignKeyConstraint([phil_id],
>                          [PlayerPro.phil_id],
>                          onupdate="CASCADE")
>
> ``` Prior to adding Schema as a table_args to PlayerPro model the creation 
> of the foreign key didn't add `mesa.player_pro.phil_id` and instead was 
> using `player_pro.phil_id? Adding schema makes things
>
> work. But I'm wondering why that info couldn't have been derived from the 
> base associated with the actual model.
>
>
> On Wednesday, March 20, 2019 at 9:55:44 AM UTC-4, Mike Bayer wrote:
>>
>> On Wed, Mar 20, 2019 at 7:43 AM mkwyche <mkw...@gmail.com> wrote: 
>> > 
>> > For anyone else that runs into a similar issue. This 
>> https://stackoverflow.com/questions/43584453/how-to-handle-cross-schema-foreign-key-in-sqlalchemy
>>  
>> was helpful. 
>> > 
>> > I needed to add 
>> > ``` 
>> > __table_args__ = {'schema': 'mesa'} 
>> > ``` 
>> > 
>> > To `player_pro` model. Then it worked. Why isn't the schema derived 
>> from the `declaritive_base` associated with the model? 
>>
>> How is the schema being associated with the declarative base ?    I 
>> don't see any mention of "schema" until your example here. 
>>
>>
>> > 
>> > On Wednesday, March 20, 2019 at 7:16:06 AM UTC-4, mkwyche wrote: 
>> >> 
>> >> Also I tried to put in their mesa.player_pro.phil_Id instead of the 
>> actual column and I get this error: 
>> >> 
>> >> ``` 
>> >> sqlalchemy.exc.NoReferencedTableError: Foreign key associated with 
>> column 'eval_pro_hit.phil_id' could not find table 'mesa.player_pro' with 
>> which to generate a foreign key to target column 'phil_id' 
>> >> ``` 
>> >> 
>> >> Is there a way to reference a table from another DeclaritiveBase? 
>> >> 
>> >> On Wednesday, March 20, 2019 at 7:11:06 AM UTC-4, mkwyche wrote: 
>> >>> 
>> >>> Hi, 
>> >>> 
>> >>> I have two classes: 
>> >>> 
>> >>> ```python 
>> >>> 
>> >>> class PlayerPro(MESA_BASE): 
>> >>>     ''' player_pro model ''' 
>> >>>     __tablename__ = "player_pro" 
>> >>> 
>> >>>     # Primary Keys 
>> >>>     ebis_id = Column(MEDIUMINT(9), primary_key=True) 
>> >>>     bam_id = Column(MEDIUMINT(9), index=True) 
>> >>>     phil_id = Column(MEDIUMINT(9), index=True) 
>> >>> 
>> >>> 
>> >>> 
>> >>> class EvalProHit(PHIL_DATA_BASE): 
>> >>>     ''' Eval Pro Hit model ''' 
>> >>>     __tablename__ = "eval_pro_hit" 
>> >>> 
>> >>>     def list_id_default(self):  # pylint: disable=no-self-use 
>> >>>         return uuid.uuid4().hex 
>> >>> 
>> >>>     # Keys 
>> >>>     eval_id = Column(VARCHAR(255), primary_key=True, 
>> default=list_id_default) 
>> >>>     phil_id = Column(MEDIUMINT(9), nullable=False) 
>> >>> 
>> >>>     ForeignKeyConstraint([phil_id], 
>> >>>                          [PlayerPro.phil_id], 
>> >>>                          onupdate="CASCADE") 
>> >>> 
>> >>> ``` 
>> >>> 
>> >>> There in two different databases. When I go to create the tables the 
>> create statement is incorrect: 
>> >>> 
>> >>> ```sql 
>> >>> INFO:sqlalchemy.engine.base.Engine: 
>> >>> CREATE TABLE eval_pro_hit ( 
>> >>> eval_id VARCHAR(255) NOT NULL, 
>> >>> phil_id MEDIUMINT(9) NOT NULL, 
>> >>> 
>> >>> FOREIGN KEY(phil_id) REFERENCES player_pro (phil_id) ON UPDATE 
>> CASCADE 
>> >>> ) 
>> >>> ``` 
>> >>> 
>> >>> Should be mesa.player_pro instead of player_pro. This is occuring 
>> from PHIL_DATA_BASE.metadata.create_all() . How can I accomplish this with 
>> models? 
>> > 
>> > -- 
>> > SQLAlchemy - 
>> > The Python SQL Toolkit and Object Relational Mapper 
>> > 
>> > http://www.sqlalchemy.org/ 
>> > 
>> > To post example code, please provide an MCVE: Minimal, Complete, and 
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
>> description. 
>> > --- 
>> > You received this message because you are subscribed to the Google 
>> Groups "sqlalchemy" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an email to sqlalchemy+...@googlegroups.com. 
>> > To post to this group, send email to sqlal...@googlegroups.com. 
>> > Visit this group at https://groups.google.com/group/sqlalchemy. 
>> > For more options, visit https://groups.google.com/d/optout. 
>>
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to