【问题标题】:Nonetype Object is not callable - while quering on a database [closed]Nonetype 对象不可调用-在数据库上查询时[关闭]
【发布时间】:2021-11-24 02:13:55
【问题描述】:

我对 Flask 很陌生。在对数据库执行查询时,它会引发以下错误。你能帮我理解为什么会发出错误吗?

C:\Users\tamim\Documents\Python_projects\user_login_sql\launch.py​​:7: SyntaxWarning: 'NoneType' 对象不可调用;也许你漏掉了一个逗号?

如果 User.query.filter_by(username='John').first() 是 None(): Traceback(最近一次调用最后一次):

文件“C:\Users\tamim\Documents\Python_projects\user_login_sql\launch.py​​”,第 7 行,在 如果 User.query.filter_by(username='John').first() 是 None(): TypeError: 'NoneType' 对象不可调用

我正在尝试将 SQLAlchemy 与 Flask 一起使用,而不是遵循 Flask-SQLAlchemy。用于启动应用程序的模块如下:

from app import create_app, db
from app.models import User

if __name__=='__main__':
    app = create_app('development')
    '''add a default user'''
    if User.query.filter_by(username='John').first() is None():
        User.register('John', 'Cat')
    app.run()

这是app的init.py里面的代码:

import os
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_login import LoginManager
#from sqlalchemy.orm import sessionmaker, scoped_session
from .sqlalchemy_bind import Flask_sqlalchemy

bootstrap = Bootstrap()
db = Flask_sqlalchemy()
lm = LoginManager()
lm.login_view = 'main.login'

def create_app(config_name):
    '''Create an application instance'''
    app = Flask(__name__)

    #import configuration
    cfg = os.path.join(os.getcwd(), 'configure', config_name+'.py')
    app.config.from_pyfile(cfg)

    #initialize extensions
    from .models import User
    db.init_app(app)

    bootstrap.init_app(app)

    lm.init_app(app)

    #import blueprints
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)


    return app

模型代码如下:

from werkzeug.security import generate_password_hash, check_password_hash
from . import db, lm
from flask_login import UserMixin
from sqlalchemy import Column, Integer, String

class User(UserMixin, db.Base):
    __tablename__ ='users'
    id = Column(Integer, primary_key=True)
    username = Column(String(16), index=True, unique=True)
    password_hash = Column(String)

    def __init__(self, username = None, password = None):
        self.username = username
        self.password = password

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)
    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)
    @staticmethod
    def register(username, password):
        user = User(username=username)
        user.set_password(password)
        db.session.add(user)
        db.session.commit()

    def __repr__(self):
        return '<User {0}>'.format(self.username)

@lm.user_loader
def load_user(id):
    return User.query.get(int(id))

使用 Flask 的 SQLAlchemy 的原始代码取自 https://github.com/klfoulk16/flask-sqlalchemy-bind

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    None 不是函数/方法。因此,请将您的登录过滤条件更改为如下所示:

    if User.query.filter_by(username='John').first() is None:
            User.register('John', 'Cat')
    

    【讨论】:

    • 谢谢弗迪。我的错 - 之前错过了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2020-08-12
    • 1970-01-01
    • 2012-08-10
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多