首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PonyORM数据库表动态定义

PonyORM数据库表动态定义
EN

Stack Overflow用户
提问于 2020-04-07 23:48:56
回答 1查看 331关注 0票数 2

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

代码语言:javascript
复制
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

我希望在不使用特定Databse实例的情况下以抽象的通用方式定义表,并在需要时将其连接到实例。

是否有办法这样做?

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

代码语言:javascript
复制
# 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中的表,因为我希望动态定义表的全部目的是将数据库实例创建与表类的定义分离开来,即:

代码语言:javascript
复制
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)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 12:23:25

首先,您是在处理实体,而不是表。他们不是一回事。

您的问题可以通过像工厂一样定义函数来解决。

代码语言:javascript
复制
def define_entities(db):
    class Entity1(db.Entity):
        attr1 = Required(str)
        ... and so on

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

代码语言:javascript
复制
db = Database(...)
define_entities(db)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61091216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档