sqlalchemy: не может получить данные из базы данных

Я учусь использовать sqlalchemy и пирамиду, поэтому я пытался получить свои объекты из базы данных, которая уже создана, но я ничего не могу получить. Я прочитал документацию по sqlalchemy, но не могу получить никаких объектов.

models.py

import os
import sys
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine

Base = declarative_base()

class Poll(Base):
    __tablename__ = 'poll'
    # Here we define columns for the table person
    # Notice that each column is also a normal Python instance attribute.
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)

class Type(Base):
    __tablename__ = 'type'
    id = Column(Integer, primary_key=True)
    name = Column(String(250))

class Question(Base):
    __tablename__ = 'question'
    # Here we define columns for the table address.
    # Notice that each column is also a normal Python instance attribute.
    id = Column(Integer, primary_key=True)
    text = Column(String(250))
    type_id = Column(Integer, ForeignKey('type.id'))
    type = relationship(Type)
    poll_id = Column(Integer, ForeignKey('poll.id'))
    poll = relationship(Poll)

class Option(Base):
    __tablename__ = 'option'
    id = Column(Integer, primary_key=True)
    text = Column(String(250))
    question_id =  Column(Integer, ForeignKey('question.id'))
    question = relationship(Question)

class Answer(Base):
    __tablename__ = 'answer'
    id = Column(Integer, primary_key=True)
    text = Column(String(250))
    option_id = Column(Integer, ForeignKey('option.id'))
    option = relationship(Option)

views.py

from pyramid.view import view_config
from .models import *
from sqlalchemy.orm import *

db = create_engine('mysql://polls:polls@localhost:3306/polls')
db.echo = True
Session = sessionmaker(bind=db)
session = Session()

@view_config(route_name='home', renderer='templates/mytemplate.jinja2')
def my_view(request):
    q = session.query(Poll).first()
    return {'project': 'polls', 'variable':q.name}

шаблон

{% extends "layout.jinja2" %}

{% block content %}
<div class="content">
  <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">Starter project</span></h1>
  <p class="lead">Welcome to <span class="font-normal">{{variable}}</span>, a&nbsp;Pyramid application generated&nbsp;by<br><span class="font-normal">Cookiecutter</span>.</p>
</div>
{% endblock content %}

Я получаю объект None в представлении. Что я делаю не так точно?

2 ответа

Решение

Я был немного смущен концепциями, но, видимо, проблема заключалась в том, что я скрывал Base.metadata.create_all(engine) в models.py, думая, что это заставит воссоздать всю базу данных. Похоже, что если это не доступно, sqlalchemy неправильно отображает данные.

Благодарю.

В документации по SQLAlchemy говорится, что правильный способ подключения к БД MySQL выглядит так:

db = create_engine('mysql+pymysql://polls@localhost:3306/polls'

Вы могли бы дать этому шанс (добавив в +pymysql) когда вы звоните create_engine()

Примечание: вам, возможно, придется установить pymysql с pip install pymysql

Другие вопросы по тегам