PonyORM数据库表动态定义

2024-05-05 17:05:18 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所做的研究所知,在Python中使用PonyORM定义表的典型方法如下:

from pony.orm import *
db = Database()
# Database connection ...
class SampleTable(db.entity):
    sample_int_field = Required(int)
    sample_string_field = Required(str)
    # ...
db.generate_mapping(create_tables=True)

我的问题:这使用db.entity

我希望定义一个表,而不以抽象的一般方式使用特定的数据库实例,并在需要时将其连接到实例

有没有办法做到这一点

概念(可能不是真正的可运行代码):


# SampleAbstractTable.py

from pony.orm import *
class SampleAbstractTable(Database):  
    sample_int_field = Required(int)
    sample_string_field = Required(str)
    # ...

# main.py

from pony.orm import *
import SampleAbstractTable
db = Database()
# Database connection ...
db.connectTables((SampleAbstractTable.SampleAbstractTable, ...))
db.generate_mapping(create_tables=True)

编辑:

我的一个想法是为我希望与某一组表一起使用的数据库创建一个包装类,并在init中定义表,因为我希望动态定义表的全部目的是将数据库实例的创建与表类的定义分开,即:

from pony.orm import *
class sampleDatabase:
    def __init__(self):
        self._db = Database()
        # Database connection ...
        class TableA(db.entity):
            # ...
        class TableB(db.entity):
            # ...
        self._db.generate_mapping(create_tables=True)

但是我在访问数据库表时遇到了问题


Tags: samplefromimport数据库fielddb定义orm
1条回答
网友
1楼 · 发布于 2024-05-05 17:05:18

首先,您使用的是实体,而不是表。他们不是一回事

您的问题可以通过定义类似factory的函数来解决

def define_entities(db):
    class Entity1(db.Entity):
        attr1 = Required(str)
        ... and so on

然后,当您稍后创建Database实例时,只需调用

db = Database(...)
define_entities(db)

相关问题 更多 >