【发布时间】:2015-09-17 20:01:57
【问题描述】:
python、flask 和 sqlalchemy 的新手。请帮忙。
我正在用烧瓶写一个小应用程序。我将一些模型定义为:
class Field(db.Model):
__tablename__ = 'fields'
id = db.Column(db.Integer, db.Sequence('FIELDS_SEQ'), primary_key=True)
name = db.Column(db.String(120), nullable=False)
position = db.Column(db.Integer)
# a field has only one type
type_id = db.Column(db.Integer, db.ForeignKey(FieldType.id))
# a field only belongs to one table
table_info_id = db.Column(db.Integer, db.ForeignKey('tables_info.id'), unique=True)
_create_db_sequence('FIELDS_SEQ')
class TableInfo(db.Model):
__tablename__ = 'tables_info'
id = db.Column(db.Integer, db.Sequence('TABLES_INFO_SEQ'), primary_key=True)
name = db.Column(db.String(120), unique=True, nullable=False)
# a table can have a lot of fields
fields = db.relationship(Field, backref='table_info', lazy='joined')
# a table only belongs to one department
department_id = db.Column(db.Integer, db.ForeignKey('departments.id'))
_create_db_sequence('TABLES_INFO_SEQ')
所以我有一个表单来收集 TableInfo 的 name 属性。现在,我如何动态地 - 在运行时 - 创建一个空表,其 name 属性仅具有一个列定义 (id)。创建表后,我将使用另一个表单来收集字段/列名。同样,我想动态地将这些列添加到表中。由于此表及其列不会基于上述预定义模型,我如何在运行时以应用程序可以与之交互的方式创建表和列?我读到flask-sqlalchemy 使用声明性基础,它需要在创建映射表之前定义模型。我可以在 flask-sqlalchemy 环境中动态创建表吗?谢谢。
【问题讨论】:
-
看起来您的表结构可能过于复杂。虽然这是可以理解的,但您可能有一个用例,您需要更多的列在运行中,虽然我确信这将通过 SQL alchemy 实现,但它最终将成为一个 hacky 或非 ORM 解决方案。您可能会更轻松地研究允许动态动态创建列的 no-sql 解决方案。
-
@F Boucaut 不幸的是,我现在只能使用 Oracle。您能否详细说明如何通过 sqlalchemy 实现这一点?
标签: python flask flask-sqlalchemy