Python SQLAlchemy Query:AttributeError:'Connection'对象没有属性'contextual_connect'

时间:2013-10-09 22:36:49

标签: python mysql database orm sqlalchemy

我正在尝试从SQLAlchemy关注如何在python中创建条目和查询MYSQL数据库的tutorial。当我第一次在adding new objects部分中尝试查询数据库以测试是否已将对象添加到数据库时(请参阅下面的大代码块),我收到以下错误:{{1} }

我可以查询数据库。例如,如果我将最后一行代码更改为AttributeError: 'Connection' object has no attribute 'contextual_connect',它会成功返回一个查询对象,但我无法弄清楚如何从此查询结果中获取我输入数据库的对象。

同样,如果我尝试按照他们在querying中建议的结果进行循环 部分:

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

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

我的代码:

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

更新/工作代码:

(1)更改为SQLAlchemy引擎,如下面的代码所述。

(2)记得创建表格: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()

(3)使用SQLAlchemy教程中的Base.metadata.create_all(engine)类的“万无一失”版本。请注意SQLAlchemy,我们(至少我)觉得自己像个傻瓜一样,希望你能够总是在教程的主体中使用万无一失的版本,而不是忙碌的读者可能会跳过它。

所有产生工作代码:

User

2 个答案:

答案 0 :(得分:8)

您必须将会话绑定到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

答案 1 :(得分:-1)

from sqlalchemy.orm import sessionmaker

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

session = Session()