__table__ is public (private would be a single or double underscore prefix 
only), but also you could use inspect(cls).column_attrs:

https://docs.sqlalchemy.org/en/13/orm/mapping_api.html?highlight=column_attrs#sqlalchemy.orm.Mapper.column_attrs



On Wed, Aug 19, 2020, at 1:22 AM, Dale Preston wrote:
> Thanks.  The label is an interesting option; I'll look into that.
> 
> On a StackOverflow thread, I got *row.__table__.columns* which I can iterate 
> over and test the key, allowing me to get the column I need but I have to 
> loop through all the columns until I find the one I want for each row because 
> columns doesn't have an index either.  I also don't like using a private 
> property but I guess (hope) __table__ would always be there.
> On Tuesday, August 18, 2020 at 6:05:49 PM UTC-5 Mike Bayer wrote:
>> 
>> 
>> On Tue, Aug 18, 2020, at 5:20 PM, Dale Preston wrote:
>>> I'm using sqlalchemy 1.3.18.  I'm trying to write an app that looks at data 
>>> from an ORM declarative table without necessarily knowing the table 
>>> definition.
>>> 
>>> What I am looking for is a way to get a single object (row in resultSet), 
>>> having the name of column[1] is "lastname", and having "lastname" as a 
>>> string in memory, how can I get the value of the "lastname" field from the 
>>> row in resultSet?
>>> 
>>> It's easy if I know in code that the row has a lastname property and I can 
>>> use row.lastname but I want to do something like row["lastname"] or 
>>> row.columns["lastname"] if there's a way.
>> 
>> to get individual columns in the row you query for those columns directly:
>> 
>> 
>> row = sess.query(User.lastname).first()
>> 
>> print(row.lastname)
>> 
>> 
>> otherwise you can always label a column if you need:
>> 
>> row = sess.query(User.anything.label("lastname")).first()
>> 
>> print(row.lastname)
>> 
>> 
>> 
>> 
>> 
>> 
>>> 
>>> 
>>> I'm using reflection to get the columns for the table.  Here's some code I 
>>> tried:
>>> 
>>> class Users(Base):
>>>     __tablename__ = 'users'
>>>     userid = Column(String(80), primary_key=True)
>>>     lastname = Column(String(40), nullable=False)
>>>     firstname = Column(String(40), nullable=False)
>>>     emailaddress = Column(String(80), nullable=False)
>>> 
>>> def ReflectTableColumns(DbEngine, meta, targetTable):
>>>     tableschema = Table(targetTable, meta, autoload=True, 
>>> autoload_with=DbEngine)
>>>     cols = dict()
>>>     for c in tableschema.columns:
>>>         print("{0}\t|\t{1}".format(c.name, c.type))
>>>         cols[c.name] = c.type
>>>     
>>>     return cols
>>> 
>>> def GetUsers():
>>>     DBSession = sessionmaker(bind=Engine)
>>>     session = DBSession()
>>>     ShowTableData(session.query(Users).all(), 'users')
>>> 
>>> 
>>> def ShowTableData(resultSet, tablename):
>>>     columns = ReflectTableColumns(Engine, Base.metadata, tablename)
>>>     columnNames = list(columns.keys())
>>>     print (type(resultSet))
>>>     for row in resultSet:
>>>         print (row.items[columnNames[1]])
>>>         print (row.columns[columnNames[1]])
>>>         print (row[columnNames[1]])
>>>         
>>> GetUsers()
>>> 

>>> --
>>> 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/f11bf60e-e872-489e-9a9b-03998440bbb1n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/sqlalchemy/f11bf60e-e872-489e-9a9b-03998440bbb1n%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/975d8626-39cf-439f-b5ed-df1e9680f7bfn%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/975d8626-39cf-439f-b5ed-df1e9680f7bfn%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/9bfe5942-6161-455e-845a-924b2e9f4f12%40www.fastmail.com.

Reply via email to