我有以下代码在我的机器上运行且没有错误:
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()
然而,当我将它部署到Linux VDS(Archlinux,相同版本的所有版本)时,我收到以下错误:
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
我的模型源代码:
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 :忘记提及会话['user']绝对是一个整数
答案 0 :(得分:0)
可能是该用户行中的一个列与SQLAlchemy所期望的类型不同。
以下是有人收到该错误的示例,因为其中一个布尔列为空而不是true或false:https://groups.google.com/forum/#!topic/sqlalchemy/SrKN8yfYEUw