Nailed it, removing quote;False and setting the quoting characters to [] 
did the job.  Huge thanks for the help, 

On Friday, 29 May 2015 09:43:27 UTC+10, Michael Bayer wrote:
>
>  
>
> On 5/28/15 7:13 PM, Adam Darwin wrote:
>  
> Thanks for the response Michael as far as I can tell there is no 
> reflective step in created the declarative_base the code is as posted.
>  
>
> OK then you do not need the "extend_existing" flag, below is a test case 
> which illustrates that even with this flag, the quote flag is honored, as 
> long as nothing else in the program already made a Table object with that 
> same name on the same MetaData.  If you can modify this test to show what 
> you're doing, that will help me to understand where to go with this.
>
> from sqlalchemy import *
> from sqlalchemy.orm import *
> from sqlalchemy.ext.declarative import declarative_base
> from sqlalchemy.schema import CreateTable
>
> Base = declarative_base()
>
>
> class RiskAggregationGroup(Base):
>     __tablename__ = 'RISK_AGGREGATION_GROUP'
>     __table_args__ = {'quote': False, 'extend_existing': True}
>     id = Column(Integer, name='id_risk_agg', primary_key=True)
>     name = Column(String(50), name='nm_risk_agg')
>     description = Column(String(100), name='tx_desc')
>
>
> e = create_engine("sybase://")
>
>
> # I don't have a sybase database handy, so here's a print
> print(CreateTable(RiskAggregationGroup.__table__).compile(e))
>
>
>
>  
> If I try enabling quotes it fails:
>
> ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] 
> [Sybase][ODBC Driver][Adaptive Server Enterprise]Incorrect syntax near 
> 'RISK_AGGREGATION_GROUP.'.\n (102) (SQLExecDirectW)") [SQL: u'SELECT 
> "RISK_AGGREGATION_GROUP".id_risk_agg AS "RISK_AGGREGATION_GROUP_i_1", 
> "RISK_AGGREGATION_GROUP".nm_risk_agg AS "RISK_AGGREGATION_GROUP_n_2", 
> "RISK_AGGREGATION_GROUP".tx_desc AS "RISK_AGGREGATION_GROUP_t_3", 
> "RISK_AGGREGATION_GROUP".saves_pl AS "RISK_AGGREGATION_GROUP_s_4", 
> "RISK_AGGREGATION_GROUP".id_market_making AS "RISK_AGGREGATION_GROUP_i_5", 
> "RISK_AGGREGATION_GROUP".id_bond_trading AS "RISK_AGGREGATION_GROUP_i_6", 
> "RISK_AGGREGATION_GROUP".id_trader AS "RISK_AGGREGATION_GROUP_i_7" \nFROM 
> "RISK_AGGREGATION_GROUP" \nWHERE "RISK_AGGREGATION_GROUP".id_market_making 
> = 1']
>  
>
> that suggests we might be using the wrong quoting character on sybase; 
> it's not failing to locate the table, it's raising a syntax error.   not 
> really sure, I don't have a sybase handy to test with.   It's possible this 
> quoting character should be a bracket.  You can set that like this:
>
> e = create_engine("sybase://")
>
> # if not using quote=False, this will change the quoting character
> e.dialect.identifier_preparer.initial_quote = '['
> e.dialect.identifier_preparer.final_quote = ']'
>
>
> if that confirms the issue, file a bug because we should fix that.
>
>
>  
> I'm struggling to understand the code in sqlalchemy, but from what I can 
> guess the table gets created and then _init_existing is called with the 
> __table_args__ (although I can't find where).  
>
> Would I be correct in saying that what you're expecting is that in 
> _setup_table the table should not already exist in the dict?  I've no idea 
> why it would
>
>
> On Friday, 29 May 2015 00:35:56 UTC+10, Michael Bayer wrote: 
>>
>>      
>>
>> On 5/27/15 10:34 PM, Adam Darwin wrote:
>>  
>>  Whilst upgrading from sqlalchemy 0.8 to 1.0.4 my ORM has broken with 
>> the error Can't redefine 'quote' or 'quote_schema' arguments
>>
>> I connect to a sybase db, and use a declarative_base
>>
>> Base = declarative_base()
>>
>> Using a standard method to create the mapping below
>>
>> class RiskAggregationGroup(Base): 
>>     __tablename__ = 'RISK_AGGREGATION_GROUP' 
>>     __table_args__ = {'quote':False,'extend_existing':True} 
>>     id = Column(Integer, name='id_risk_agg', primary_key=True) 
>>     name = Column(String(50), name='nm_risk_agg') 
>>     description = Column(String(100), name='tx_desc')
>>
>> This worked fine in sqlalchemy 0.8 but breaks in 1.0.4 as it doesn't like 
>> me specifying quote as a table arg. I've tried a whole host of things to 
>> get around this, setting it in the base, e.g.
>>  
>> The message you are getting refers to when the table metadata has already 
>> been reflected, and the correct identifiers have already been loaded from 
>> the database.  This is not illustrated here but it seems likely that you 
>> are also running a reflection step before you create this declarative base; 
>> no such error is emitted otherwise.  I would need clarification on that. 
>>
>>  throws the same error. If I change it to use the @declared_attr the 
>> quoting is not turned off. I'm unable to change the sybase settings and my 
>> table names are all caps (which is the cause of the quoting). I've got 
>> about 20 tables defined here, so am loathe to change them all to Table 
>> creations, such as:
>>  
>> If your table is named in ALL_CAPS (on the database side) and Sybase is 
>> considering this in a case-sensitive manner, then you need the quotes.   
>> Quoting means, "this name is in exactly this case", so if your statement 
>> "my table names are all caps (on the database side, right?)" is true, then 
>> you need the quoting. If you mean "my table names are all caps" on the 
>> *Python* side, but they are case insensitive on the Sybase side, then the 
>> code is wrong.  Change all the identifier names to be lower case. 
>>
>>  class RiskAggregationGroup(Base): 
>>     __tablename__ = 'RISK_AGGREGATION_GROUP'
>>     __table__ = Table(__tablename__, Base.metadata, 
>>     Column(Integer, name='id_risk_agg', primary_key=True, key='id'), 
>>     Column(String(50), name='nm_risk_agg', key='name'), quote=False)
>>
>> Does anyone have a more elegant solution, so far google has failed me?
>>  -- 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 
>> http://groups.google.com/group/sqlalchemy. For more options, visit 
>> https://groups.google.com/d/optout. 
>>
>>  -- 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 
> <javascript:>. To post to this group, send email to 
> sqlal...@googlegroups.com <javascript:>. Visit this group at 
> http://groups.google.com/group/sqlalchemy. For more options, visit 
> https://groups.google.com/d/optout. 
>
>

-- 
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to