Я пытаюсь создать простое приложение, использующее флягу и sqlalchemy, связанные с базой данных MySQL. Я создал таблицу User в моей базе данных с некоторыми фиктивными данными и пытаюсь проверить образец запроса на моем/api-маршруте. Я продолжаю получать внутреннюю ошибку сервера, и для меня жизнь не может понять, что происходит. Я сделал приложение, подобное этому раньше, и это никогда не давало мне этой странной ошибки. Трассировка стека выглядит следующим образом:Загадочная ошибка с sqlalchemy: объект TypeError 'User' не является вызываемым
2016-12-02 22:15:16,079 - app - ERROR - Exception on /api [GET]
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1988, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1642, in full_dispatch_request
response = self.make_response(rv)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1746, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 847, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 57, in _run_wsgi_app
return _run_wsgi_app(*args)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/test.py", line 871, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'User' object is not callable
app.py
from flask import Flask
from database.models import User
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy import create_engine
engine = create_engine('mysql://root:[email protected]/testdb', convert_unicode=True)
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Create a scoped session
ssession = scoped_session(Session)
app = Flask(__name__)
# Setup our error logging
if app.debug is not True:
import logging
from logging.handlers import RotatingFileHandler
file_handler = RotatingFileHandler('errors.log', maxBytes=1024 * 1024 * 100, backupCount=20)
file_handler.setLevel(logging.ERROR)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
app.logger.addHandler(file_handler)
@app.route('/')
def index():
return 'hello world'
@app.route('/api')
def api_route():
# Error is happening right here
return ssession.query(User).first()
if __name__ == '__main__':
app.run(debug=False)
базы данных/models.py
from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, BLOB, \
DateTime, ForeignKey
Base = declarative_base()
class User(Base):
__tablename__ = 'User'
id = Column(Integer, primary_key=True)
email = Column(String(64), unique=True)
password = Column(String(255))
join_date = Column(DateTime)
last_login = Column(DateTime)
login_count = Column(Integer, default=0)
name = Column(String(128), default=None)
location = Column(String(128), default=None)
points = Column(Integer, default=0)
num_posts = Column(Integer, default=0)
def __init__(self, email, password):
self.email = email
self.password = password
self.join_date = datetime.utcnow()
self.last_login = datetime.utcnow()
def __repr__(self):
return '<User %r>' % self.email
Я понятия не имею, вообще, почему это не работает - на самом деле он отлично работает на консоли python, если я импортирую все необходимые модули! Любое понимание было бы удивительным.