Python SQLAlchemy 查询:AttributeError:“连接”对象没有属性“contextual_connect”

2024-03-11

我正在尝试遵循这个tutorial http://docs.sqlalchemy.org/en/rel_0_8/orm/tutorial.html from SQLAlchemy关于如何在 python 中创建条目并查询 MYSQL 数据库。当我第一次尝试按照他们的方法查询数据库时添加新对象 http://docs.sqlalchemy.org/ru/latest/orm/tutorial.html#adding-new-objects部分来测试对象是否已添加到数据库中(请参见下面的大代码块),我收到以下错误:AttributeError: 'Connection' object has no attribute 'contextual_connect'

我可以查询数据库。例如,如果我将代码的最后一行更改为our_user = session.query(User).filter_by(name='ed')它成功返回一个查询对象,但我无法弄清楚如何从该查询结果中获取我输入数据库的对象。

同样,如果我尝试按照他们的建议循环结果querying http://docs.sqlalchemy.org/ru/latest/orm/tutorial.html#querying部分:

for instance in session.query(User).order_by(User.id):
    print instance.name, instance.fullname

我犯了同样的错误。我该如何修复这个特定的错误,是否有任何其他关于在 Python 中使用 MYSQL 和 SQLAlchemy 的教程,您可以向我指出吗?

My code:

import MySQLdb
from sqlalchemy import create_engine

db1 = MySQLdb.connect(host="127.0.0.1",
                      user="root",
                      passwd="****",
                      db="mydata")



from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password

    def __repr__(self):
        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)


ed_user = User('ed', 'Ed Jones', 'edspassword') 

from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
Session.configure(bind=db1)

session = Session()
session.add(ed_user)

our_user = session.query(User).filter_by(name='ed').first()

更新/工作代码:

(1) 更改为 SQLAlchemy 引擎,如下面 codeape 所讨论的。

(2)记得创建表:Base.metadata.create_all(engine)

(3) 使用“万无一失”的版本UserSQLAlchemy 教程中的类。请注意 SQLAlchemy,我们(至少我)感觉自己像个傻瓜,希望您在教程的主体中始终使用万无一失的版本,而不是作为忙碌的读者可能会跳过的旁白。

所有这些都会产生工作代码:

import MySQLdb
from sqlalchemy import create_engine

engine = create_engine("mysql://user:password@host/database")

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

from sqlalchemy import Column, Integer, String, Sequence

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(12))

    def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password

    def __repr__(self):
        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)



Base.metadata.create_all(engine)

ed_user = User('ed', 'Ed Jones', 'edspassword') 

from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
Session.configure(bind=engine)

session = Session()
session.add(ed_user)



our_user = session.query(User).filter_by(name='ed').first()

print(our_user is ed_user)

您必须将会话绑定到 SQLAlchemy 引擎,而不是直接绑定到 MySQLDb 连接对象。

engine = create_engine("mysql://user:password@host/dbname")
Session.configure(bind=engine)

(您可以删除您的db1多变的。)

从教程中:

create_engine() 的返回值是 Engine 的一个实例,它代表数据库的核心接口,通过处理正在使用的数据库和 DBAPI 的详细信息的方言进行调整。

也可以看看https://docs.sqlalchemy.org/en/latest/orm/tutorial.html https://docs.sqlalchemy.org/en/latest/orm/tutorial.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python SQLAlchemy 查询:AttributeError:“连接”对象没有属性“contextual_connect” 的相关文章

随机推荐