I am looking for a way to introspect SQLAlchemy ORM classes/entities to determine the types and other constraints (like maximum lengths) of an entity's properties.
For example, if I have a declarative class:
class User(Base):
__tablename__ = "USER_TABLE"
id = sa.Column(sa.types.Integer, primary_key=True)
fullname = sa.Column(sa.types.String(100))
username = sa.Column(sa.types.String(20), nullable=False)
password = sa.Column(sa.types.String(20), nullable=False)
created_timestamp = sa.Column(sa.types.DateTime, nullable=False)
I would want to be able to find out that the 'fullname
' field should be a String with a maximum length of 100, and is nullable. And the 'created_timestamp
' field is a DateTime and is not nullable.
automap_base(declarative_base=None, **kw) Produce a declarative automap base. This function produces a new base class that is a product of the AutomapBase class as well a declarative base produced by declarative_base() .
Agree with all previous answers: yes, SQLAlchemy is really more powerful than Django ORM, gives you a real control over your SQL and is very explicit. But 90% of our work is just simple create/read/update/delete or finding object by id.
The various “polymorphic” keyword arguments are specified using __mapper_args__ . This section describes some specific details on how the Declarative system interacts with SQLAlchemy ORM inheritance configuration. See Mapping Class Inheritance Hierarchies for a general introduction to inheritance mapping.
SQLAlchemy is a library that facilitates the communication between Python programs and databases. Most of the times, this library is used as an Object Relational Mapper (ORM) tool that translates Python classes to tables on relational databases and automatically converts function calls to SQL statements.
Something like:
table = User.__table__
field = table.c["fullname"]
print "Type", field.type
print "Length", field.type.length
print "Nullable", field.nullable
EDIT:
The upcoming 0.8 version has a New Class Inspection System:
New Class Inspection System
Status: completed, needs docs
Lots of SQLAlchemy users are writing systems that require the ability to inspect the attributes of a mapped class, including being able to get at the primary key columns, object relationships, plain attributes, and so forth, typically for the purpose of building data-marshalling systems, like JSON/XML conversion schemes and of course form libraries galore.
Originally, the Table and Column model were the original inspection points, which have a well-documented system. While SQLAlchemy ORM models are also fully introspectable, this has never been a fully stable and supported feature, and users tended to not have a clear idea how to get at this information.
0.8 has a plan to produce a consistent, stable and fully documented API for this purpose, which would provide an inspection system that works on classes, instances, and possibly other things as well. While many elements of this system are already available, the plan is to lock down the API including various accessors available from such objects as Mapper, InstanceState, and MapperProperty:
(follow the link for more info)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With