在 Flask 中动态创建和持久化模型 - Sqlalchemy

Vin*_*oel 5 python flask python-2.7 flask-sqlalchemy

我正在写一个 Flask webapp。我需要能够基于用户输入创建模型并基于模型创建表。此外,我还希望能够稍后使用该模型(在重新启动 Web 服务器之后)。这样做的最佳方法是什么?

我正在为 ORM 使用带有 sqlalchemy 的烧瓶。

vit*_*ore 2

你将会有很多动态查询。

你见过它INFORMATION_SCHEMA.tablesINFORMATION_SCHEMA.columns样子吗?

基本上,您将使用它们或在数据库中创建这些表的克隆。

然后,您将从这些表中读取信息来动态执行如下操作:

 from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey

 def make_metadata(source):
     ...
     return MetaData(...)     

 def make_column(column_definition): 
     return Column(....)


 all_table_definitions = ... # array of records from your custom_tables
 all_column_definitions = ... # map of table name to array of column definition for your tables from custom_columns
 my_tables = {}

 for t in all_table_definition:
   columns = [make_column(c) for c in all_column_definitions[t.name]]
   new_table = Table(t.table_name, make_metadata(t.metadata), columns*)
Run Code Online (Sandbox Code Playgroud)

之后,您将拥有包含 all_table_definitions所有表描述的数组以及my_tables用于查询数据的 ORM 表对象