Perfect! Thank you, Mike. Ben __________________________________________ [image: Dataspace] <https://dataspace.com> Benjamin Taub, CEO Direct: (734) 585-3503 Check out Golden Record <https://goldenrecord.dataspace.com/>, our cloud-based record matching and deduplication solution Blog: http://www.dataspace.com/insights/blog/ Twitter: twitter.com/dataspaceinc
*NOTE: I usually check email only 2 - 3 times / day. For issues needing immediate attention, please call.* On Tue, Dec 22, 2020 at 1:31 PM Mike Bayer <[email protected]> wrote: > you could use "fullname" but you would need to apply string splitting > across the dot and then quoting of the individual tokens. > > assuming you are using case insensitive identifiers it would be safe to > generically do the above for all strings if you wanted: > > qualified_name = ".".join( > "`%s`" % token for token in fullname.split(".") > ) > > SQLAlchemy has quoting facilities also but they are specific to using the > compiler, so if you aren't using the @compiles extension then you would do > whatever works to get the quoting you need in your SQL statement. > > > On Tue, Dec 22, 2020, at 1:25 PM, Benjamin Taub wrote: > > Thank you, Mike. In my case, I am writing a TRUNCATE TABLE statement. I > don't think SQLAlchemy provides that so I'm writing it in text and having > the engine execute it rather than having SQLAlchemy generate it. Are you > recommending, therefore, that I not use the *fullname* attribute for this? > > On Tuesday, December 22, 2020 at 1:17:59 PM UTC-5 Mike Bayer wrote: > > > the .fullname attribute is not used directly in SQL statements, when a > schema or table name requires quoting the compiler will apply them as > needed. > > from sqlalchemy import Column > from sqlalchemy import String > from sqlalchemy.dialects import mysql > from sqlalchemy.ext.declarative import declarative_base > from sqlalchemy.orm import Session > > Base = declarative_base() > > > class SomeTable(Base): > __tablename__ = "3table" > > id = Column(String, primary_key=True) > > __table_args__ = {"schema": "4schema"} > > > s = Session() > > print(s.query(SomeTable).statement.compile(dialect=mysql.dialect())) > > output: > > SELECT `4schema`.`3table`.id > FROM `4schema`.`3table` > > > > > On Tue, Dec 22, 2020, at 12:35 PM, Benjamin Taub wrote: > > schema.py defines a variable fullname for tables as follows: > > *if *self.schema *is not None*: > self.fullname = *"%s.%s" *% (self.schema, self.name) > *else*: > self.fullname = self.name > > However, this fails for me in some cases, apparently when my table or > schema name starts with a number. To address this, shouldn't self.fullname > be surrounded by delimiters (e.g. "`%s`.`%s`")? > > FWIW, I'm working in MySQL. > > Thanks! > 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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/4c572cf3-992a-4527-a2a9-500bc48170e5n%40googlegroups.com > <https://groups.google.com/d/msgid/sqlalchemy/4c572cf3-992a-4527-a2a9-500bc48170e5n%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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/22f5f83d-0d53-4922-83e0-24ac9af778acn%40googlegroups.com > <https://groups.google.com/d/msgid/sqlalchemy/22f5f83d-0d53-4922-83e0-24ac9af778acn%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 a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/PCUvHcDatvM/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/6ee23436-8fe5-40d6-b2c0-d1d9545b729a%40www.fastmail.com > <https://groups.google.com/d/msgid/sqlalchemy/6ee23436-8fe5-40d6-b2c0-d1d9545b729a%40www.fastmail.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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CAOeAApPoJEzGo1BxBDDaV_fXuz4qsO59SFVvggLEpK-09y2Feg%40mail.gmail.com.
