Python 基于预先存在的表自动生成类/模型

Python 基于预先存在的表自动生成类/模型,python,sqlalchemy,Python,Sqlalchemy,如何在不手动创建类/模型的情况下,基于预先存在的表生成类/模型。在我的例子中,这只在没有任何关系的平板上使用。 假设我的postgres数据库中有下表: id | brand_name | cloth_type 1 nike t-shirt 2 adidas t-shirt 3 nike skirt 我如何获得第一行id 1的对象/实例,而不必自己编写模型? 有没有办法创建一个动态生成的抽象类,或者根

如何在不手动创建类/模型的情况下,基于预先存在的表生成类/模型。在我的例子中,这只在没有任何关系的平板上使用。 假设我的postgres数据库中有下表:

id  |  brand_name  |  cloth_type
1      nike           t-shirt
2      adidas         t-shirt
3      nike           skirt
我如何获得第一行id 1的对象/实例,而不必自己编写模型? 有没有办法创建一个动态生成的抽象类,或者根据表添加属性

我发现了这一点,但无法真正掌握如何实施它。

我想要实现的可能类似于这个粗略的代码

engine = db_connect(db_config_section)  # creates engine based on config 
file
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
abstract_class = ...  # somehow generate abstract class
obj = session.query(abstract_class).get(1)
谢谢你可能的回复

编辑: 在链接解决方案中,仍然有一个使用固定类名和表名定义的类。这不是我要找的。 我想要的代码应该独立于一个表。例如,在我的示例中,用于cloth选项卡的代码也适用于下表car:

   id  |  brand_name  |  car_type | doors
    1      bmw           suv        4
    2      ford          pickup     2
    3      fiat          cuv        2

好的,我解决了。正如IljaEveriläsad所说,解决方案主要由他链接的stackoverflow帖子给出。我不得不稍微调整一下。我理解得有点慢,很抱歉。 以下是我的解决方案:

def create_class_by_table(table_name, engine):
      table = Table(table_name, Base.metadata, autoload=True, autoload_with=engine)
      class_name = table_name.capitalize()
      attributes = {'__table__': table}
      new_class = type(class_name, (Base,), attributes)
      return new_class

new_class = create_class_by_table(table_name, engine)  # table_name could be e.g. 'car'
obj = session.query(new_class).get(obj_id)

如果您对最初基于现有表生成模型感兴趣,请查看@IljaEverilä感谢您的提示,但不幸的是,这并不能解决我的问题。您检查了吗?@IljaEverilä是的,但它没有解决我的问题,因为它似乎适用于不同的情况,即使它稍微相似。据我所知,这个解决方案仍然依赖于编写自己的模型/类。模型MyClass仍然是固定的,并且只有一个表是在Tabel调用中声明的。因此,必须为数据库中的每个表编写这样的模型。这就是我不想要的。还有更抽象的解决方案吗?例如,使用type函数根据表生成一个类,然后使用sqlalchemy检索实例?这与链接答案使用automap扩展所做的差不多。它在运行时为您生成模型类。您不会编写类代码。