Python SQLAlchemy Requête: AttributeError: 'Connexion' objet n'a pas d'attribut "contextual_connect'

Je suis en train de suivre ce tutoriel de SQLAlchemy sur la façon de créer des entrées dans le et d'interroger une base de données MYSQL en python. Lorsque j'essaie de requête et de la base de données pour la première fois à la suite le long de leur l'ajout de nouveaux objets section pour tester si un objet a été ajouté à la base de données (voir gros bloc de code ci-dessous), j'obtiens l'erreur suivante: AttributeError: 'Connection' object has no attribute 'contextual_connect'

Je peux interroger la base de données. Par exemple, si je change la dernière ligne de code à our_user = session.query(User).filter_by(name='ed') elle renvoie un objet de requête, mais je ne peux pas comprendre comment obtenir l'objet, je suis entré dans la base de données de ce résultat de la requête.

De même, si j'essaie de faire une boucle sur les résultats qu'ils proposent dans leur l'interrogation
section:

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

Je reçois la même erreur. Comment puis-je corriger cette erreur et existe-il d'autres tutoriels sur l'utilisation de MYSQL en Python avec SQLAlchemy que vous pourriez m'indiquer?

Mon 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()

Mise À Jour/Code De Travail:

(1) Variation à SQLAlchemy moteur tel que discuté par codeape ci-dessous.

(2) n'oubliez pas de créer la table: Base.metadata.create_all(engine)

(3) Utilisez la "infaillible" version de la User classe de SQLAlchemy du tutoriel. Note à SQLAlchemy, nous (du moins je) se sentir comme un imbécile et tiens à vous d'utiliser d'utiliser toujours de la à toute épreuve de version dans le corps principal de votre tutoriel et pas que d'un côté que d'un lecteur occupé peut sauter par-dessus.

Tout ce que les rendements de code de travail:

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)
  • Vous n'avez pas besoin de la import MySQLdb déclaration.
  • J'ai eu le même problème mais j'ai en boucle sur la sessionmaker objet. La boucle doit s'exécuter sur le minuscule session dans cet exemple. Qui me troublait un peu. for instance in session.query(User).filter_by(name='ed'): print(our_user is ed_user)
InformationsquelleAutor Michael | 2013-10-09