作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我对 Python 和 sqlalchemy 没有太多经验。我检查了之前提出的类似问题,但仍然无法解决我的问题。我有一个独立的池 pgbouncer。我正在尝试使用 pgbouncer 的 sqlalchemy 前端。为了不让连接保持打开状态,我尝试使用 contextmanager 和 with 语句。我认为我在 get_db_session() 方法中的错误。但还是找不到。
这是我的repository.py
import logging
import threading
from contextlib import contextmanager
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.pool import StaticPool
from sqlalchemy.pool import NullPool
@contextmanager
def get_db_session():
try:
engine = create_engine(
'postgresql://superuser:@localhost:6432/testdbname', poolclass=NullPool)
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
some_session = Session()
print "got new session"
yield some_session
print "after yield goingt to commit"
some_session.commit()
except Exception as ex:
print(ex)
some_session.roleback()
finally:
some_session.expunge_all()
some_session.close()
print "closing"
def save(entity, _clazz=None):
if _clazz:
if hasattr(entity, 'id'): # usually id is None so this method acs as normal save
_id = entity.id
else:
_id = entity.name
try:
if _id:
found = find(_clazz, _id)
if found is not None:
if isinstance(found, list):
for e in found:
delete(e)
else:
delete(found)
except NoResultFound:
pass
with get_db_session() as se:
se.add(entity)
se.commit()
def delete(entity):
with get_db_session() as se:
se.delete(entity)
se.commit()
def find_by_element_value(_clazz, element, value):
with get_db_session() as se:
res = se.query(_clazz).filter(element == value).all()
se.commit()
return res
def get_all(_class):
print "get_all starte"
with get_db_session() as se:
print "entered with"
res = se.query(_class).all()
print "going to commit"
se.commit()
return res
我在这里使用它 test.py
import repositories as repository
import model
if __name__ == '__main__':
a = repository.get_all(model.HomeCategory)
a[0].slug
然后我得到这个错误。我无法理解我的错误在哪里。
Traceback (most recent call last):
File "/home/sahin/workspace/myspider/myspider/spiders/test.py", line 6, in <module>
a[0].slug
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 237, in __get__
return self.impl.get(instance_state(instance), dict_)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 579, in get
value = state._load_expired(state, passive)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/state.py", line 592, in _load_expired
self.manager.deferred_scalar_loader(self, toload)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/loading.py", line 644, in load_scalar_attributes
(state_str(state)))
DetachedInstanceError: Instance <HomeCategory at 0x7f157008dd90> is not bound to a Session; attribute refresh operation cannot proceed
也许有人可以提供帮助。谢谢。
我是一名优秀的程序员,十分优秀!