PonyORM 数据库 Table 动态定义
PonyORM Database Table Dynamic Definition
据我所做的研究所知,在 Python 中使用 PonyORM 定义 table 的典型方法如下所示:
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
我希望定义一个table而不使用特定的数据库实例以抽象的一般方式,并连接它在我需要的时候给实例。
有办法吗?
概念(大概不是真正的可运行代码):
# 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)
编辑:
我的一个想法是为我希望与某组 table 一起使用的数据库创建一个包装器 class,并在 init 中定义 table ,因为我希望动态定义 tables 的全部意义在于将数据库实例创建与 table classes 的定义分开,即:
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)
但是我在访问数据库时遇到问题 tables...
首先,您使用的是实体,而不是表。它们不是一回事。
你的问题只要像factory这样定义函数就可以解决
def define_entities(db):
class Entity1(db.Entity):
attr1 = Required(str)
... and so on
然后稍后当您创建 Database
实例时,您只需调用
db = Database(...)
define_entities(db)
据我所做的研究所知,在 Python 中使用 PonyORM 定义 table 的典型方法如下所示:
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
我希望定义一个table而不使用特定的数据库实例以抽象的一般方式,并连接它在我需要的时候给实例。
有办法吗?
概念(大概不是真正的可运行代码):
# 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)
编辑:
我的一个想法是为我希望与某组 table 一起使用的数据库创建一个包装器 class,并在 init 中定义 table ,因为我希望动态定义 tables 的全部意义在于将数据库实例创建与 table classes 的定义分开,即:
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)
但是我在访问数据库时遇到问题 tables...
首先,您使用的是实体,而不是表。它们不是一回事。
你的问题只要像factory这样定义函数就可以解决
def define_entities(db):
class Entity1(db.Entity):
attr1 = Required(str)
... and so on
然后稍后当您创建 Database
实例时,您只需调用
db = Database(...)
define_entities(db)