我在这里关注指南:
http://www.sqlalchemy.org/docs/orm/examples.html?highlight=versioning#versioned-objects
并遇到了一个问题.我已经定义了我的关系:
generic_ticker = relation('MyClass', backref=backref("stuffs"))
Run Code Online (Sandbox Code Playgroud)
使用字符串,因此它不关心我的模型模块的导入顺序.这一切都正常,但是当我使用版本控制元时,我收到以下错误:
sqlalchemy.exc.InvalidRequestError:初始化映射器Mapper | MyClass | stuffs时,表达式"Trader"找不到名称("name'MyClass'未定义").如果这是类名,请考虑在定义了两个依赖类之后将此关系()添加到类中.
我将错误追踪到:
File "/home/nick/workspace/gm3/gm3/lib/history_meta.py", line 90, in __init__
mapper = class_mapper(cls)
File "/home/nick/venv/tg2env/lib/python2.6/site-packages/sqlalchemy/orm/util.py", line 622, in class_mapper
mapper = mapper.compile()
Run Code Online (Sandbox Code Playgroud)
class VersionedMeta(DeclarativeMeta):
def __init__(cls, classname, bases, dict_):
DeclarativeMeta.__init__(cls, classname, bases, dict_)
try:
mapper = class_mapper(cls)
_history_mapper(mapper)
except UnmappedClassError:
pass
Run Code Online (Sandbox Code Playgroud)
我通过将try:除了lambda中的东西并在所有导入发生之后运行它们来修复问题.这有效,但似乎有点垃圾,任何想法如何解决这个是一个更好的方法?
谢谢!
更新
问题实际上不是关于进口订单.版本控制示例的设计使得映射器需要在每个版本化类的costructor中进行编译.当相关类尚未定义时,编译失败.在循环关系的情况下,无法通过更改映射类的定义顺序使其工作.
更新2
正如上面的更新所述(我不知道你可以在这里编辑其他人的帖子:))这可能是由于循环引用.在这种情况下可能有人会发现我的hack有用(我正在使用它与turbogears)(替换VersionedMeta并在history_meta中添加create_mappers全局)
create_mappers = []
class VersionedMeta(DeclarativeMeta):
def __init__(cls, classname, bases, dict_):
DeclarativeMeta.__init__(cls, classname, bases, dict_)
#I added this code in as it was crashing …Run Code Online (Sandbox Code Playgroud) 有没有办法让SQLAlchemy进行批量插入而不是插入每个单独的对象.即
这样做的:
INSERT INTO `foo` (`bar`) VALUES (1), (2), (3)
Run Code Online (Sandbox Code Playgroud)
而不是:
INSERT INTO `foo` (`bar`) VALUES (1)
INSERT INTO `foo` (`bar`) VALUES (2)
INSERT INTO `foo` (`bar`) VALUES (3)
Run Code Online (Sandbox Code Playgroud)
我刚刚转换了一些代码来使用sqlalchemy而不是原始的sql,虽然它现在更好用,但它现在看起来更慢(高达10倍),我想知道这是否是原因.
也许我可以更有效地使用会话来改善这种情况.在我添加了一些东西之后,我autoCommit=False现在做了一件事session.commit().虽然这似乎导致数据在其他地方更改数据库时变得陈旧,即使我做了一个新的查询,我仍然会得到旧的结果?
谢谢你的帮助!
当我尝试使用我的beanstalk svn repo(https://beanstalkapp.com)颠覆时,我得到以下类型的错误:
Some of selected resources were not committed.
svn: Commit failed (details follow):
svn: Received fatal alert: bad_record_mac
Run Code Online (Sandbox Code Playgroud)
这可以通过命令行工作,只是没有eclipse或颠覆性的svn插件.我已经读到它与不允许旧版本的SSL有关,但无法在eclipse中找到任何修复方法.
谢谢!