Я пытаюсь следовать этому tutorial от SQLAlchemy
о том, как создавать записи и запрашивать базу данных MYSQL в python. Когда я впервые попробую базу данных в следующем блоке adding new objects, чтобы проверить, был ли объект добавлен в базу данных (см. Большой блок кода ниже), я получаю следующую ошибку: AttributeError: 'Connection' object has no attribute 'contextual_connect'
Python SQLAlchemy Query: AttributeError: объект «Connection» не имеет атрибута «contextual_connect»
Я могу запросить базы данных. Например, если я изменю окончательную строку кода на our_user = session.query(User).filter_by(name='ed')
, она успешно возвращает объект запроса, но я не могу понять, как получить объект, который я ввел в базу данных из этого результата запроса.
Точно так же, если я пытаюсь петлю над результатами, поскольку они предполагают в своем разделе querying :
for instance in session.query(User).order_by(User.id):
print instance.name, instance.fullname
я получаю ту же ошибку. Как я могу исправить эту конкретную ошибку и есть ли какие-либо другие руководства по использованию MYSQL в Python с SQLAlchemy, на которые вы могли бы указать мне?
Мой код:
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()
Update/Рабочий код:
(1) Изменение к двигателю SQLAlchemy, как обсуждалось codeape ниже.
(2) Не забудьте создать таблицу: Base.metadata.create_all(engine)
(3) Используйте "ошибкоустойчивую" версию User
класса из учебника SQLAlchemy в. Обратите внимание на SQLAlchemy, мы (по крайней мере, я) чувствуем себя дураком и хотели бы, чтобы вы использовали, чтобы всегда использовать надежную версию в основной части вашего учебника, а не как в сторону, которую может пропустить занятый читатель.
Все, что Урожайность рабочий код:
import MySQLdb
from sqlalchemy import create_engine
engine = create_engine("mysql://user:[email protected]/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)
Вам не нужно '' импорта MySQLDb '' заявление. – codeape
У меня была такая же проблема, но я зациклился на объекте 'sessionmaker'. В этом примере цикл должен выполняться в нижнем регистре 'session'. Это немного смутило меня. 'например, в session.query (User) .filter_by (name = 'ed'): print (our_user is ed_user)' – kkuilla