小编Ale*_*sky的帖子

如何使用Pony ORM反映数据库对象?

我有一个现有的MySQL数据库,我想用PonyORM来反映.

我知道我可以用SQLAlchemy做到这一点:

engine = create_engine(...)
Base = declarative_base(metadata=MetaData(bind=engine))
...
...
class MyTable(Base):
    __table__ = Table('table_name', Base.metadata, autoload=True)
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法与PonyORM一样?我在网站上找不到相关信息.

python mysql database orm ponyorm

7
推荐指数
1
解决办法
1434
查看次数

PonyORM-多个模型文件

我想将我的模型类分离到models目录中的单独文件中。我想要一个单独的文件用于:

  • 常规(身份验证和全局类/表)
  • 申请单(用于申请单的表)
  • 工作单(用于工作单的表)
  • sales_orders(用于销售订单的表)
  • ...等等

我不确定如何组织我的项目来实现这一目标。

我尝试将主要导入文件放入目录的init .py中,并将它们导入各个模型文件中,但是我不知道将db.generate_mapping()放在哪里,以便所有类都可用。我猜想这是大型应用程序的最佳实践。此时,我的应用程序中大约有150张桌子。

任何帮助/指针将不胜感激。

python ponyorm

4
推荐指数
1
解决办法
418
查看次数

Pony ORM报告记录"在当前交易之外更新",而没有其他交易

代码非常简单,如下所示:

from pony.orm import Required, Set, Optional, PrimaryKey
from pony.orm import Database, db_session
import time


db = Database('mysql', host="localhost", port=3306, user="root",
                      passwd="123456", db="learn_pony")


class TryUpdate(db.Entity):
    _table_ = "try_update_record"
    t = Required(int, default=0)

db.generate_mapping(create_tables=True)


@db_session
def insert_record():
    new_t = TryUpdate()


@db_session
def update():
    t = TryUpdate.get(id=1)
    print t.t
    t.t = 0
    print t.t


if __name__ == "__main__":
    insert_record()
    update()
Run Code Online (Sandbox Code Playgroud)

pony.orm报告异常:pony.orm.core.CommitException:对象TryUpdate [1]在当前事务之外更新.但是根本没有其他交易在运行

正如我的实验所示,只要tt更改为与原始值不同的值,pony就可以正常工作,但是当tt设置为等于原始值的值时,它总是会报告异常.

我不确定这是否是一个设计决定.在分配之前,我是否必须检查输入值是否每次都在变化?或者我有什么办法可以避免这个烦人的异常?

我的小马版:0.4.8

Thansk很多~~~

python orm transactions ponyorm

3
推荐指数
1
解决办法
760
查看次数

PonyORM 0.4.8引发NameError:未定义名称xx

我的程序有一个奇怪的问题,异常堆栈是:

*except Exception, cause: raise ExprEvalError(src, cause)
ExprEvalError: date_after raises NameError: name 'date_after' is not defined*
Run Code Online (Sandbox Code Playgroud)

所以代码是:

    @staticmethod
def get_recently(days_before=30):
    delta = timedelta(days=days_before)
    date_after = datetime.now() - delta
    return list(Version.select(lambda v:v.create_time>date_after).order_by(desc(Version.create_time))[:])
Run Code Online (Sandbox Code Playgroud)

ORM框架是Pony,但我认为它与此无关.代码可以在其他PC上正常运行.

你能告诉我这是什么问题吗?谢谢.

PS

  • Python的2.7.4
  • 小马-0.4.8

python nameerror ponyorm

0
推荐指数
1
解决办法
382
查看次数

标签 统计

ponyorm ×4

python ×4

orm ×2

database ×1

mysql ×1

nameerror ×1

transactions ×1