Nonetype 对象不可调用 - 在数据库上查询时
Nonetype Object is not callable - while quering on a database
我是 Flask 的新手。在对数据库执行查询时,它会抛出以下错误。你能帮我理解为什么会出现错误吗?
C:\Users\tamim\Documents\Python_projects\user_login_sql\launch.py:7: SyntaxWarning: 'NoneType' object is not callable; perhaps you missed a comma?
if User.query.filter_by(username='John').first() is None():
Traceback (most recent call last):
File "C:\Users\tamim\Documents\Python_projects\user_login_sql\launch.py", line 7, in
if User.query.filter_by(username='John').first() is None():
TypeError: 'NoneType' object is not callable
我正在尝试将 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()
这是init.py里面的代码app:
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
None
不是 function/method。因此,请将您的登录过滤条件更改为如下所示:
if User.query.filter_by(username='John').first() is None:
User.register('John', 'Cat')
我是 Flask 的新手。在对数据库执行查询时,它会抛出以下错误。你能帮我理解为什么会出现错误吗?
C:\Users\tamim\Documents\Python_projects\user_login_sql\launch.py:7: SyntaxWarning: 'NoneType' object is not callable; perhaps you missed a comma?
if User.query.filter_by(username='John').first() is None(): Traceback (most recent call last):
File "C:\Users\tamim\Documents\Python_projects\user_login_sql\launch.py", line 7, in if User.query.filter_by(username='John').first() is None(): TypeError: 'NoneType' object is not callable
我正在尝试将 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()
这是init.py里面的代码app:
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
None
不是 function/method。因此,请将您的登录过滤条件更改为如下所示:
if User.query.filter_by(username='John').first() is None:
User.register('John', 'Cat')