问题标签 [ponyorm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2251 浏览

python - 使用 Pony ORM 或 sqlalchemy 时,在哪里创建数据库对象?

我开始玩一些对象关系映射器(特别是Pony ORM)。

Pony中,所有实体定义都继承自db.Entity该类。然而,为了做到这一点,当然db需要先在某个地方创建对象。(db.Entity有点类似于sqlalchemy中的声明性基础,所以我相信我下面的问题对sqlalchemy也同样有效)

我在 Pony ORM 文档中看到的所有示例都提供了内联示例,其中在db声明实体之前在解释器提示中简单地声明了 Database 对象。

这给我留下了一个问题:我应该在“真实”项目中在哪里创建我的 db 对象?

特别考虑我想将我的实体定义与我实际使用这些实体的位置分开的情况(比如我只想构建一个好的 ORM 包装器包来访问数据库,然后应该在多个不同的其他项目中使用它)。然后我可能希望用户提供根据db他们的需要配置的自己的对象,以便访问数据库。

一些示例代码:

假设我有一个存储人员地址的数据库,我的包my_orm应该为数据库提供一个 ORM,然后将用于app.py

我的_orm/初始化.py

my_orm/person.py:

my_orm/address.py:

应用程序.py

除了已经看起来很丑,因为它将导入与数据库的创建混合在一起,这也会抛出错误NameError: name 'db' is not defined。那么我应该怎么做呢?

0 投票
0 回答
87 浏览

python - PonyORM pytest error: RuntimeError: Request object lost db_session

I am trying to write some pytest tests for my Flask app. I'm using PonyORM. All my test pass but some teardown code is running that gives the following error. How do I manage this error? What is causing it?

enter image description here

Both my actual tests pass, but this teardown fails. I'm not sure where the teardown is made or how to handle it.

0 投票
1 回答
156 浏览

python - Pony ORM 中的 ORing 过滤器

我想使用Pony动态构建查询,但我想将过滤器与OR而不是 with结合起来AND。也就是说,我想做这样的事情:

当然,上面的问题是它会产生如下查询:

而我想要:

有没有办法到达那里?

0 投票
1 回答
184 浏览

python - 带有小马 0.7 的 Python 3.6 在提交到 oracle db 时出错

我正在使用上述版本的小马和蟒蛇。我正在尝试通过引用https://docs.ponyorm.com/firststeps.html进行插入

犯罪()

给出以下错误:

类型错误:不可散列类型:“列表”

这来自:

这是我的代码:

我的 python 版本是 3.6.1,我的 oracle 版本是 11g Express Edition Release 11.2.0.2.0 - 64bit Production

这是完整的追溯

0 投票
1 回答
139 浏览

python-3.x - 如何在 PonyORM 中“LEFT JOIN”的“ON”原因中添加条件

我想在 PonyORM 中运行以下查询。

如果您看到代码的最后一部分,我在“ON”原因中添加了一个条件。

我尝试在python中编写以下代码。

但是,“if”被称为“WHERE”原因。我怎么解决这个问题?

感谢您的帮助。

0 投票
1 回答
296 浏览

python - 使用 SQLite 了解 PonyORM 中的内存消耗

我有以下代码将大型 CSV 文件(超过 350 万行)加载到 SQLite 数据库中。

该程序运行良好,但似乎它没有释放内存,因此在运行程序时,我可以使用命令查看top它的内存大小如何增长,直到它耗尽所有可用的服务器内存并且程序在没有插入所有行的情况下被终止。

我的理解是,包含的db.commit()(每次我们开始在 CSV 中加载新月份时执行)将释放任何创建的烛台实例(我认为是那些使内存增长的实例),但它不会这样做。

为什么会发生这种情况以及可以在代码中更正哪些内容以使其在没有内存泄漏的情况下工作?

0 投票
1 回答
646 浏览

python - Pony ORM 实体单向映射给出错误

我有 2 张桌子。A和表B

id=主键

some_attribute=varchar

TableB_id=外键

id=主键

some_attribute=varchar


我的代码:

给出以下错误:
pony.orm.core.ERDiagramError: Reverse attribute for TableA.TableB_id not found


我的问题:

如何使用 Pony ORM 重新创建上述关系?实体总是需要有双向关系吗?

有什么方法可以实现正确的数据库规范化,还是我必须使用一些不同的 ORM 模块?

0 投票
1 回答
291 浏览

python-3.x - Python PonyORM 一对一映射

我正在尝试使用 Pony ORM 创建一个一对一的映射。

生成映射时抛出错误

pony.orm.core.ERDiagramError: Reverse attribute for ApplierResult.correlation_id not found

我希望 ApplierResult 表中的 correlation_id 是引用 ApplierIngress 表中的 correlation_id 的外键

请让我知道我做错了什么?

0 投票
1 回答
729 浏览

python - 如何使用 PonyORM 动态创建实体?

我想通过工厂方法在 Pony ORM 中创建数据库实体,以避免类似表的代码重复。

这是我不完全工作的最小示例:

可以通过使用创建具有动态名称的类来规避异常type,但这不适用于composite_index...

有没有使用 Pony ORM 的表工厂的好方法?

0 投票
1 回答
546 浏览

python - Pony ORM - 解决“预期的字符串或类似字节的对象”错误

我目前正在用 Python 中的 Chalice 为 AWS 开发一个 API,它使用 Pony ORM 来处理我们的数据库。当尝试使用这样的选择进行查询时,db.select(s.start_time for s in db.Session)我收到“预期的字符串或类似字节的对象”错误(下面的完整堆栈跟踪)。但是使用这样的 lambda 查询db.Session.select(lambda s: s.id = 3)按预期工作。我不知道可能是什么原因造成的,猜测是生成时不喜欢 db.Provider 部分,但我不确定 Pony 期望在那里。我尝试使用 pdb 进行调试,但我不确定它是什么告诉我。

堆栈跟踪:

Traceback(最近一次调用最后一次):文件“c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\chalice\app.py”,第 842 行,在 _get_view_function_response response = view_function(**function_args) 文件中“C:\Users\Gamer\Documents\AWS-SakMed\backend\SakMed\app.py”,第 51 行,在 _view_function 中返回包装的(*args,**kwargs)文件“”,第 2 行,在 get_cases 文件中“c :\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py”,第 528 行,在 new_func 结果 = func(*args, **kwargs) 文件“C:\Users\ Gamer\Documents\AWS-SakMed\backend\SakMed\app.py”,第 89 行,在 get_cases 查询 = db.select(p.first_name for p in db.Provider) 文件“c:\users\gamer.virtualenvs\backend -qptpobgm\lib\site-packages\pony\orm\core.py",第 881 行,在 select if not select_re.match(sql): sql = 'select ' + sql TypeError: expected string or bytes-like object

单步调试 pdb (格式化有点奇怪):

c:\users\gamer\documents\aws-sakmed\backend\sakmed\app.py(89)get_cases()

-> query = db.select(p.first_name for p in db.Provider) (Pdb) step(s)
--Call-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony \orm\core.py(3927)迭代器()

-> def iter (entity): (Pdb) c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3928) iter ()

-> return EntityIter(entity) (Pdb)
--Call-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3630) init ()

-> def init (self, entity): (Pdb) c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3631) init ()

-> self.entity = entity (Pdb)
--Return-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3631) init ()->None

-> self.entity = entity (Pdb)
--Return-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(3928) iter ()->
- > return EntityIter(entity) (Pdb)
--Call-- c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(879)select()

-> @cut_traceback (Pdb) c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(881)select()

-> 如果不是 select_re.match(sql): sql = 'select' + sql (Pdb) pp(sql) generator object get_cases.locals.genexpr at 0x048062B0 (Pdb)
step(s) TypeError: expected string or bytes-like object c:\users\gamer.virtualenvs\backend-qptpobgm\lib\site-packages\pony\orm\core.py(881)select() -> 如果不是 select_re.match(sql): sql = 'select' + sql (pdb)

相关代码:app.py

相关代码:data_store.py

相关代码:base.py