For what it's worth, I believe this double quoting issue is also happening 
with the .label() method of the column object (assuming that I do have the 
dialect appropriately set). The following code...

*tbl_col = self.tbl.c[formula_col['table_column']].label(tmplt_col['name'])*

Results in the following result in the Pycharm debugger (notice the double 
quotes)...


*'s_42331a8d8a8f3ca73660cc078731dc72.t_ec37b6f3271c0f97429d5301a41be3da."ApplicationId"'*

and then running...

*sql = sql.add_columns(tbl_col)*

Results in the following...


*SELECT 
s_42331a8d8a8f3ca73660cc078731dc72.t_ec37b6f3271c0f97429d5301a41be3da."ApplicationId"
 
AS "Application Id" FROM 
s_42331a8d8a8f3ca73660cc078731dc72.t_ec37b6f3271c0f97429d5301a41be3da*

Any suggestions? Thanks for your help!
Ben

On Saturday, May 13, 2023 at 5:12:11 PM UTC-4 Benjamin Taub wrote:

> Thank you, Mike, but aren't I using the correct dialect with this 
> create_engine() command?
>
>
>
> *        qry_engine = create_engine('mysql+pymysql://' + db_uid + ':' + 
> db_pw + '@' + db_addr, connect_args=connect_args,                          
>          pool_recycle=3600, echo=False, future=True)*
>
> Or, am I missing something? (BTW, I'm using core, not ORM).
> Thanks again!
> Ben 
> On Friday, May 12, 2023 at 4:48:45 PM UTC-4 Mike Bayer wrote:
>
>>
>>
>> On Fri, May 12, 2023, at 4:30 PM, Benjamin Taub wrote:
>>
>> I have code that worked under SQLAlchemy 1.4 but recently upgraded to 2. 
>> I am using the add_columns() method to add columns to an existing SQL 
>> statement. The resultant queries sometimes, but not always, crash. I 
>> believe the issue happens when the schema/database name (I'm using MySQL) 
>> starts with a number. When the schema name starts with a letter, the result 
>> runs fine. However, when it starts with a number, the query double-quotes 
>> the schema name, causing the query to crash.
>>
>> Here is an example...
>> My code: *sql = sql.add_columns(self.tbl.c[field])*
>>
>> When the schema holding self.tbl.c[field] starts with a letter 
>> (c6961a19b7ed031ce902f056c725b3e3), the following SQL is generated:
>>
>> *SELECT NULL AS "Application Id", NULL AS "First Name", NULL AS "Last 
>> Name", NULL AS "Email", 
>> c6961a19b7ed031ce902f056c725b3e3.t_31392eb2e6980f4d5082b7861182f2b4.master_key
>>  
>> FROM c6961a19b7ed031ce902f056c725b3e3.t_31392eb2e6980f4d5082b7861182f2b4*
>>
>> However, when the schema name starts with a number 
>> (283ac7717fe770c5ed6d425c0c739cba), the following SQL results:
>>
>> *SELECT NULL AS "Application Id", NULL AS "First Name", NULL AS "Last 
>> Name", NULL AS "Email", 
>> "283ac7717fe770c5ed6d425c0c739cba".t_59a33cbea3617986d810e9fbae60ba19.master_key
>>  
>> FROM "283ac7717fe770c5ed6d425c0c739cba".t_59a33cbea3617986d810e9fbae60ba19*
>>
>> Note the double quotes around the schema name. This second SQL crashes as 
>> invalid. Back quotes (`) would probably work fine in this situation, and 
>> could be helpful, but double quotes (") are, I think, the cause of my 
>> problem.
>>
>> Is there some parameter or assumption that I'm not understanding, or did 
>> I find a bug?
>>
>>
>> The quoting, if it were the correct quoting format, should be fine.   As 
>> to why it's the quote char and not the backtick, are you compiling these 
>> queries manually?    You would want to make sure a MySQL dialect is in use, 
>> which would be using backticks for quoting, unless that dialect were 
>> initialized against a MySQL database that has ANSI_QUOTES set.
>>
>> TL;DR quoting is a new thing here but SQLAlchemy should render the 
>> correct quotes when used with the MySQL dialect.
>>
>> Here's a demo:
>>
>> from sqlalchemy import Column
>> from sqlalchemy import create_engine
>> from sqlalchemy import Integer
>> from sqlalchemy import select
>> from sqlalchemy import String
>> from sqlalchemy.orm import declarative_base
>> Base = declarative_base()
>>
>>
>> class A(Base):
>>     __tablename__ = 't_59a33cbea3617986d810e9fbae60ba19'
>>
>>     __table_args__ = {
>>         "schema": "283ac7717fe770c5ed6d425c0c739cba"
>>     }
>>     id = Column(Integer, primary_key=True)
>>     data = Column(String)
>>
>> e = create_engine("mysql://")
>>
>> stmt = select(A)
>>
>> print(stmt.compile(e))
>>
>> output:
>>
>> SELECT `283ac7717fe770c5ed6d425c0c739cba`.
>> t_59a33cbea3617986d810e9fbae60ba19.id, 
>> `283ac7717fe770c5ed6d425c0c739cba`.t_59a33cbea3617986d810e9fbae60ba19.data 
>> FROM `283ac7717fe770c5ed6d425c0c739cba`.t_59a33cbea3617986d810e9fbae60ba19
>>
>>
>>
>>
>> Thank you!
>> Ben
>>
>>
>>
>> -- 
>> 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 view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sqlalchemy/76d38390-e17f-4b90-a438-ee078944b5ffn%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sqlalchemy/76d38390-e17f-4b90-a438-ee078944b5ffn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/31836dbd-bb43-4c33-ab95-46342dbc852an%40googlegroups.com.

Reply via email to