我有一个现有的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一样?我在网站上找不到相关信息.
我想将我的模型类分离到models目录中的单独文件中。我想要一个单独的文件用于:
我不确定如何组织我的项目来实现这一目标。
我尝试将主要导入文件放入目录的init .py中,并将它们导入各个模型文件中,但是我不知道将db.generate_mapping()放在哪里,以便所有类都可用。我猜想这是大型应用程序的最佳实践。此时,我的应用程序中大约有150张桌子。
任何帮助/指针将不胜感激。
代码非常简单,如下所示:
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很多~~~
我的程序有一个奇怪的问题,异常堆栈是:
*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