我正在使用SQLAlchemy(和Elixir)用SQLite作为数据库后端在Python中编写应用程序.我使用代码启动一个新的事务session.begin_transaction(),但是当我调用时,session.rollback()我收到以下错误:
sqlalchemy.exceptions.OperationalError: (OperationalError) no such savepoint: sa_savepoint_1 u'ROLLBACK TO SAVEPOINT sa_savepoint_1' []
Run Code Online (Sandbox Code Playgroud)
我也收到类似的错误session.commit().据我所知,sqlite支持SAVEPOINTS(http://www.sqlite.org/lang_savepoint.html).
如何使嵌套事务生效?
我在一个连接到postgres数据库的项目中使用Elixir.我想在我连接的数据库上运行以下查询,但我不知道该怎么做,因为我对Elixir和SQLAlchemy很新.谁知道怎么样?
VACUUM FULL ANALYZE table
更新
错误是:"UnboundExecutionError:无法找到在SQL表达式或此会话上配置的绑定".与之前发布的session.close()相同的结果.我确实尝试过metadata.bind.execute(),这对于一个简单的选择很有用.但对于VACUUM,它说 - "InternalError:(InternalError)VACUUM无法在事务块内运行",所以现在我正在试图弄清楚如何关闭它.
更新2
我可以让查询执行,但我仍然得到相同的错误 - 即使我创建一个新会话并关闭前一个会话.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# ... insert stuff
old_session.commit()
old_session.close()
new_sess = sessionmaker(autocommit=True)
new_sess.configure(bind=create_engine('postgres://user:pw@host/db', echo=True))
sess = new_sess()
sess.execute('VACUUM FULL ANALYZE table')
sess.close()
Run Code Online (Sandbox Code Playgroud)
我得到的输出是
2009-12-10 10:00:16,769 INFO sqlalchemy.engine.base.Engine.0x...05ac VACUUM FULL ANALYZE table
2009-12-10 10:00:16,770 INFO sqlalchemy.engine.base.Engine.0x...05ac {}
2009-12-10 10:00:16,770 INFO sqlalchemy.engine.base.Engine.0x...05ac ROLLBACK
finishing failed run, (InternalError) VACUUM cannot run inside a transaction block
'VACUUM FULL ANALYZE table' {}
Run Code Online (Sandbox Code Playgroud)
更新3
感谢大家的回应.我无法找到我想要的解决方案,但我想我会选择PostgreSQL中描述的解决方案 …
我只是想更好地感受Python文档字符串的布局(之间""" """)
我见过不同布局的docstrings ......比如...
"""
@DESCRIPTION
Ive seen tags STARTING with an at-sign
:DESCRIPTION:
Tags with colons
DESCRIPTION
And tags with nothing
"""
Run Code Online (Sandbox Code Playgroud)
这些都有功能吗?是@用药剂关联?或者这些只是开发者之间的偏好?我查看了docstrings的样式指南,但看不到它在哪里解决这些问题......
谢谢!
我一直在使用django ORM,这很好很容易,但这次我正在做一个桌面应用程序而且我找到了SQLAlchemy,但我不确定是否会使用Elixir.你怎么看?它真的有用吗?
我正在使用Elixir和sqla 0.6,我正在尝试查询我的模型:
class Document(Entity):
using_options(shortnames=True, order_by='doc_date')
doc_number = Field(Unicode(20),index=True)
Run Code Online (Sandbox Code Playgroud)
...对于具有给定长度的数字的文档.
我在考虑这样的事情:
Document.query.filter(Document.doc_number.char_lenght()==5).all()
Run Code Online (Sandbox Code Playgroud)
......但显然,CHAR_LENGTH,而目前在sqlalchemy.sql.functions,是不是在这里工作.如何在声明性成语中使其工作,而不需要直接查询?
我在徘徊elixir\sqlalchemy如何在我打电话的时候知道我在模型中声明的所有实体类setup_all()?我在我的一个小项目中需要这种功能,但我不知道.我试图通过elixir's steptrace setup_all(),我发现它将所有实体类的集合保存在"全局"列表中(或者它是dict?),但我无法捕捉到列表填充的那一刻.有任何想法吗?
我正在使用Elixir进行ORM,但我尝试按关系排序时遇到问题.
我想要做的是获得一个用户列表,按用户的帖子数排序.我试过像这样的方法
User.query.join(User.posts).order_by(func.count(User.posts)).all()
Run Code Online (Sandbox Code Playgroud)
没有任何成功.
这是我的Elixir实体:
class User(Entity):
username = Field(Unicode(100))
posts = OneToMany('Post', inverse='user')
class Post(Entity):
content = Field(Unicode(20000))
user = ManyToOne('User')
Run Code Online (Sandbox Code Playgroud)