get table columns from sqlAlchemy table model
28,600
Solution 1
You get all of the columns from __table__.columns
:
myTable.__table__.columns
or
myTable.__table__.c
The columns would be in format myTable.col1
(table name is included). If you want just column names, get the .key
for each column:
[column.key for column in myTable.__table__.columns]
Solution 2
Below is a general as_dict
implementation for an sqlalchemy table based on @ChaimG answer. And an additional example of a __repr__
that is implemented using it.
from orm.base import Base
class MyTable(Base):
__tablename__ = 'table_name'
# Columns go here.....
def as_dict(self):
"""
Helper function that allows traversing the table's instance columns as key values
:return: (key, value) iterator
"""
for key in self.__table__.columns.keys():
value = self.__getattribute__(key)
yield key, value
def __repr__(self):
"""
General __repr__ implementation for an sqlalchemy table
"""
values = []
for key, value in self.as_dict():
key_value_str = f"{key}={value}"
values.append(key_value_str)
values_str = ", ".join(values)
cls_name = self.__class__.__name__
return f"<{cls_name}({values_str})>"
Author by
john
Updated on July 28, 2022Comments
-
john almost 2 years
I have a table where I would like to fetch all the column names however after browsing the interwebs I could not find a way that works. This is what my table looks like:
class myTable(Base): __tablename__ = 'myTable' col1 = Column(Integer, primary_key=True) col2 = Column(Unicode(10)) col3 = Column(Integer) col4 = Column(Numeric(10, 6)) col5 = Column(Numeric(6,3)) col6 = Column(Numeric(6,3)) child = relationship('tChild', backref=backref('children'))
I would like to be able to print all the column names from a for loop. ex:
"col1", "col2", "col3".... etc
This is pretty easy with regular sql but I can't seem to figure out how to do it using sqlAlchemy table models