4

mysqlからUserオブジェクトを読み込もうとしていますが、UnboundExecutionErrorが発生し続けます:マッパーMapper | UserDo | user、SQL式、またはこのセッションで構成されたバインドが見つかりませんでした。私は古典的なマッピングを使用しています。

Base = declarative_base()

# A default constructor is created if one is not already present,
# which accepts keyword arguments of the same name as that of the mapped attributes.

class UserDo(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key = True)
    fname = Column(String(100))
    lname = Column(String(100))
    email = Column(String(200))
    salt = Column(String(100))
    created_on = Column(TIMESTAMP) # from sqlalchemy.dialects.mysql import TIMESTAMP

class BaseService(object):

    def __init__(self):
        self._engine = create_engine('mysql://root@localhost/my_db', pool_recycle = 3600)
        self._Session = sessionmaker(bind = self._engine)
        self._session = Session()

class UserService(BaseService):

    def create(self, data):
        print self._session.query(UserDo).first() # Error

create_engineステートメントが原因でエラーが発生するのではないかと思います。たぶん私は接続のための正しいフォーマットを提供していません。ローカルデータベースのパスワードがありません。

また、私が気付いた他の何か:print self._session.query(UserDo)

SELECT "user" .id AS user_id、 "user" .fname AS user_fname、 "user" .lname AS user_lname、 "user" .email AS user_email、 "user" .salt AS user_salt、 "user" .created_on AS user_created_on FROM "ユーザー"

これは構文的に正しくありません。いずれにせよ、User.fname、User.lname(etc)を実行することが定義どおりに機能する限り、SQLAlchemyが内部で何を実行しているかは気にしません。

誰かが何が起こっているのかわかりますか?

4

1 に答える 1

5

何らかの理由で、SQLAlchemy 0.8は、これを行う(インスタンス変数を作成する)ときにそれを好みません。

class BaseService(object):

    def __init__(self):
        self._engine = create_engine('mysql://root@localhost/my_db', pool_recycle = 3600)
        self._Session = sessionmaker(bind = self._engine)
        self._session = Session()

修正は、代わりにそれらを静的にすることでした:

class BaseService(object):
    engine = create_engine('mysql://root@localhost/my_db', pool_recycle = 3600)
    Session = sessionmaker(bind = engine)
    session = Session()

次に、次のことができます。

class UserService(BaseService):

    def create(self, data):
        BaseService.session.query(UserDo).first()
于 2012-05-27T03:49:46.647 に答える