<p><strong>摘自棉花糖sqlalchemy recipes:</strong></p>
<blockquote>
<p>"Automatically Generating Schemas For SQLAlchemy Models It can be
tedious to implement a large number of schemas if not overriding any
of the generated fields as detailed above. SQLAlchemy has a hook that
can be used to trigger the creation of the schemas, assigning them to
the SQLAlchemy model property ".</p>
</blockquote>
<p>我的例子是使用烧瓶炼金术和棉花糖炼金术:</p>
<pre><code>from flask_sqlalchemy import SQLAlchemy
from marshmallow_sqlalchemy import ModelConversionError, ModelSchema
from sqlalchemy import event
from sqlalchemy.orm import mapper
db = SQLAlchemy()
def setup_schema(Base, session):
# Create a function which incorporates the Base and session information
def setup_schema_fn():
for class_ in Base._decl_class_registry.values():
if hasattr(class_, "__tablename__"):
if class_.__name__.endswith("Schema"):
raise ModelConversionError(
"For safety, setup_schema can not be used when a"
"Model class ends with 'Schema'"
)
class Meta(object):
model = class_
sqla_session = session
schema_class_name = "%sSchema" % class_.__name__
schema_class = type(schema_class_name, (ModelSchema,), {"Meta": Meta})
setattr(class_, "Schema", schema_class)
return setup_schema_fn
event.listen(mapper, "after_configured", setup_schema(db.Model, db.session))
</code></pre>
<p>食谱中还有一个例子:</p>
<p><a href="https://marshmallow-sqlalchemy.readthedocs.io/en/latest/recipes.html#automatically-generating-schemas-for-sqlalchemy-models" rel="nofollow noreferrer">https://marshmallow-sqlalchemy.readthedocs.io/en/latest/recipes.html#automatically-generating-schemas-for-sqlalchemy-models</a></p>