TypeError:需要一个整数,SQLAlchemy + Flask [英] TypeError: an integer is required, SQLAlchemy + Flask

查看:189
本文介绍了TypeError:需要一个整数,SQLAlchemy + Flask的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  def update_user():$ b $在我的机器上运行的代码如下b user = User.query.get(session.get('user')或-1)
如果用户是None:
返回
如果不是user.token_valid():
session.pop('user',None)
return
user.lastlogin_time = int(time.time())
user.lastlogin_ip = request.remote_addr
db.session但是,当我将它部署到Linux VDS(Archlinux,同一版本的所有东西)时,我得到以下错误:
$ b $ pre $ Traceback(最近调用最后一个):
文件/ usr / lib / python2 ./ / site-packages / flask / app.py,第1836行,在__call__
中返回self.wsgi_app(environ,start_response)
文件/usr/lib/python2.7/site-packages /flask/app.py,第1820行,位于wsgi_app
response = self.make_response(self.handle_exception(e))
文件/usr/lib/python2.7/site-packages/flask /app.p y,第1403行,在handle_exception
reraise(exc_type,exc_value,tb)
文件/usr/lib/python2.7/site-packages/flask/app.py,第1817行,在wsgi_app
response = self.full_dispatch_request()
文件/usr/lib/python2.7/site-packages/flask/app.py,在1477行,在full_dispatch_request
rv = self .handle_user_exception(e)
文件/usr/lib/python2.7/site-packages/flask/app.py,第1381行,在handle_user_exception中
reraise(exc_type,exc_value,tb)
文件/usr/lib/python2.7/site-packages/flask/app.py,行1475,在full_dispatch_request
rv = self.dispatch_request()
文件/ usr / lib /python2.7/site-packages/flask/app.py,第1461行,在dispatch_request
返回self.view_functions [rule.endpoint](** req.view_args)
文件/ home / asn007 / backends / rust.qb.eu / app / views.py,第32行,在主
utils.update_user()
文件/home/asn007/backends/rust.qb.eu/ app / utils.py,第14行,在update_user
user = User。 query.get(session.get('user')或-1)
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py,行820,在
return load.load_on_ident(self,key)
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py,第226行,在load_on_ident
返回q.one()
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py,行2310,在一个
ret = list(self)
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py,第72行,在实例中
rows = [process [0](row,None)for row in fetch]
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py,第447行,在_instance
populate_state(state,dict_,row,isnew,only_load_props )
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py,第301行,在populate_state
populator(state,dict_,row)
文件/usr/lib/python2.7/site-packages/sqlalchemy/orm/strategies.py,行151,在fetch_col
dict_ [key] = r我的模型源代码: 用户(db.Model):
__tablename__ ='users'
uid = db.Column(db($ db
$ b pre $ .Integer,autoincrement = True)
vk_id = db.Column(db.BigInteger,primary_key = True,unique = True)
vk_token = db.Column(db.Text)
vk_token_expiration = db .Column(db.BigInteger)
name = db.Column(db.Text)
email = db.Column(db.Text)
is_banned = db.Column(db.Boolean)
lastvote = db.Column(db.Integer)
lastlogin_time = db.Column(db.BigInteger)
lastlogin_ip = db.Column(db.String(255))
api_key = db.Column(db.String(128))

def __init __(self,uid = None,vk_id = None,vk_token = None,vk_token_expiration = None,email = None,name = None,
is_banned = False,lastvote = None,lastlogin_time = None,lastlogin_ip = None,api_key =无):
super(User,self).__ init __()
self.uid = uid
self.vk_id = vk_id
self.vk_token = vk_token
self.vk_token_expiration = vk_token_expiration
self.name = name
self.email = email
self.is_banned = is_banned
self.lastvote = lastvote
self.lastlogin_time = lastlogin_time
self.lastlogin_ip = lastlogin_ip
self.api_key = api_key

def token_valid(self):
return self.vk_token_expiration> int(time.time())

def can_create_projects(self):
return len(Project.query.filter_by(owner = self.uid).all())< 10

def can_vote(self):
return self.lastvote + 60 * 60 * 24 <= int(time.time())


$ b UPD1 :忘记提及session ['user']绝对是一个整数


这可能是该用户行中的某一列与SQLAlchemy预期的类型不同。


下面是一个人得到这个错误的例子,因为他们的一个布尔列是空的而不是true或false: https://groups.google.com/forum/#!topic/sqlalchemy/SrKN8yfYEUw


I've got the following code which runs on my machine without errors:

def update_user():
    user = User.query.get(session.get('user') or -1)
    if user is None:
        return
    if not user.token_valid():
        session.pop('user', None)
        return
    user.lastlogin_time = int(time.time())
    user.lastlogin_ip = request.remote_addr
    db.session.commit()

However, when I deploy it to Linux VDS (Archlinux, same version of everything) I get the following error:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/asn007/backends/rust.q-b.eu/app/views.py", line 32, in main
    utils.update_user()
  File "/home/asn007/backends/rust.q-b.eu/app/utils.py", line 14, in update_user
    user = User.query.get(session.get('user') or -1)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 820, in get
    return loading.load_on_ident(self, key)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 226, in load_on_ident
    return q.one()
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2310, in one
    ret = list(self)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 72, in instances
    rows = [process[0](row, None) for row in fetch]
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 447, in _instance
    populate_state(state, dict_, row, isnew, only_load_props)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 301, in populate_state
    populator(state, dict_, row)
  File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/strategies.py", line 151, in fetch_col
    dict_[key] = row[col]
TypeError: an integer is required

My model source code:

class User(db.Model):
    __tablename__ = 'users'
    uid = db.Column(db.Integer, autoincrement=True)
    vk_id = db.Column(db.BigInteger, primary_key=True, unique=True)
    vk_token = db.Column(db.Text)
    vk_token_expiration = db.Column(db.BigInteger)
    name = db.Column(db.Text)
    email = db.Column(db.Text)
    is_banned = db.Column(db.Boolean)
    lastvote = db.Column(db.Integer)
    lastlogin_time = db.Column(db.BigInteger)
    lastlogin_ip = db.Column(db.String(255))
    api_key = db.Column(db.String(128))

    def __init__(self, uid=None, vk_id=None, vk_token=None, vk_token_expiration=None, email=None, name=None,
                 is_banned=False, lastvote=None, lastlogin_time=None, lastlogin_ip=None, api_key=None):
        super(User, self).__init__()
        self.uid = uid
        self.vk_id = vk_id
        self.vk_token = vk_token
        self.vk_token_expiration = vk_token_expiration
        self.name = name
        self.email = email
        self.is_banned = is_banned
        self.lastvote = lastvote
        self.lastlogin_time = lastlogin_time
        self.lastlogin_ip = lastlogin_ip
        self.api_key = api_key

    def token_valid(self):
        return self.vk_token_expiration > int(time.time())

    def can_create_projects(self):
        return len(Project.query.filter_by(owner=self.uid).all()) < 10

    def can_vote(self):
        return self.lastvote + 60 * 60 * 24 <= int(time.time())

UPD1: forgot to mention that session['user'] is definitely an integer

解决方案

It could be that one of your columns in that user's row is a different type than SQLAlchemy expects.

Here is an example of someone getting that error because one of their Boolean columns was empty instead of true or false: https://groups.google.com/forum/#!topic/sqlalchemy/SrKN8yfYEUw

这篇关于TypeError:需要一个整数,SQLAlchemy + Flask的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆