Heroku postgresql 运算符不存在
Heroku postgresql operator does not exist
我将网站部署到 Heroku 运行 postgresql。之前是在flask开发环境运行sqlite上有的。该应用程序 运行 在使用日程视图时很好,但是当我从 Heroku 访问日程视图时,出现错误。
CLASS
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), index=True)
description = db.Column(db.String(200), index=True)
priority = db.Column(db.Integer)
is_complete = db.Column(db.Boolean) ####might be trouble
url = db.Column(db.String(200), index=True)
est_dur = db.Column(db.Integer)
time_quad = db.Column(db.Integer)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
路线
@bp.route('/schedule')
#@login_required
def schedule():
currentUser = current_user.id
q1 = Task.query.filter_by(time_quad=1).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
q2 = Task.query.filter_by(time_quad=2).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
q3 = Task.query.filter_by(time_quad=3).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
q4 = Task.query.filter_by(time_quad=4).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
taskAll = q1 + q2 + q3 + q4
print("current user" + str(currentUser))
return render_template('schedule.html', taskList = taskAll)
错误
Exception on /schedule [GET]
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
context)
File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
cursor.execute(statement, parameters)
psycopg2.ProgrammingError: operator does not exist: boolean = integer
LINE 3: ....time_quad = 1 AND task.user_id = 1 AND task.is_complete = 0
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
[SQL: 'SELECT task.id AS task_id, task.name AS task_name, task.description AS task_description, task.priority AS task_priority, task.is_complete AS task_is_complete, task.url AS task_url, task.est_dur AS task_est_dur, task.time_quad AS task_time_quad, task.timestamp AS task_timestamp, task.user_id AS task_user_id \nFROM task \nWHERE task.time_quad = %(time_quad_1)s AND task.user_id = %(user_id_1)s AND task.is_complete = %(is_complete_1)s'] [parameters: {'time_quad_1': 1, 'user_id_1': 1, 'is_complete_1': 0}] (Background on this error at: http://sqlalche.me/e/f405)
PostgreSQL 有一个真正的布尔类型,但 SQLite 没有,SQLite 通常使用 1 和 0 来表示 true 和 false(分别)。当你这样说时:
filter_by(is_complete=0)
0
将被 SQLite 解释为 "false" 但被 PostgreSQL 解释为数字零;因此,Heroku 抱怨无法比较 task.is_complete = 0
中的布尔值和整数。如果你的意思是"false",那么说:
filter_by(is_complete=False)
当与 SQLite 对话时应将其转换为零,与 PostgreSQL 对话时应将其转换为正确的布尔值 'f'
(或 false
)。
一旦你解决了这个问题,我强烈建议你在你的开发环境中安装 PostgreSQL,如果这是你要部署的数据库。如果您在同一个堆栈上进行开发、测试和部署,您将拥有更好的时间。
我将网站部署到 Heroku 运行 postgresql。之前是在flask开发环境运行sqlite上有的。该应用程序 运行 在使用日程视图时很好,但是当我从 Heroku 访问日程视图时,出现错误。
CLASS
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), index=True)
description = db.Column(db.String(200), index=True)
priority = db.Column(db.Integer)
is_complete = db.Column(db.Boolean) ####might be trouble
url = db.Column(db.String(200), index=True)
est_dur = db.Column(db.Integer)
time_quad = db.Column(db.Integer)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
路线
@bp.route('/schedule')
#@login_required
def schedule():
currentUser = current_user.id
q1 = Task.query.filter_by(time_quad=1).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
q2 = Task.query.filter_by(time_quad=2).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
q3 = Task.query.filter_by(time_quad=3).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
q4 = Task.query.filter_by(time_quad=4).filter_by(user_id=currentUser).filter_by(is_complete=0).all()
taskAll = q1 + q2 + q3 + q4
print("current user" + str(currentUser))
return render_template('schedule.html', taskList = taskAll)
错误
Exception on /schedule [GET]
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
context)
File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 509, in do_execute
cursor.execute(statement, parameters)
psycopg2.ProgrammingError: operator does not exist: boolean = integer
LINE 3: ....time_quad = 1 AND task.user_id = 1 AND task.is_complete = 0
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
[SQL: 'SELECT task.id AS task_id, task.name AS task_name, task.description AS task_description, task.priority AS task_priority, task.is_complete AS task_is_complete, task.url AS task_url, task.est_dur AS task_est_dur, task.time_quad AS task_time_quad, task.timestamp AS task_timestamp, task.user_id AS task_user_id \nFROM task \nWHERE task.time_quad = %(time_quad_1)s AND task.user_id = %(user_id_1)s AND task.is_complete = %(is_complete_1)s'] [parameters: {'time_quad_1': 1, 'user_id_1': 1, 'is_complete_1': 0}] (Background on this error at: http://sqlalche.me/e/f405)
PostgreSQL 有一个真正的布尔类型,但 SQLite 没有,SQLite 通常使用 1 和 0 来表示 true 和 false(分别)。当你这样说时:
filter_by(is_complete=0)
0
将被 SQLite 解释为 "false" 但被 PostgreSQL 解释为数字零;因此,Heroku 抱怨无法比较 task.is_complete = 0
中的布尔值和整数。如果你的意思是"false",那么说:
filter_by(is_complete=False)
当与 SQLite 对话时应将其转换为零,与 PostgreSQL 对话时应将其转换为正确的布尔值 'f'
(或 false
)。
一旦你解决了这个问题,我强烈建议你在你的开发环境中安装 PostgreSQL,如果这是你要部署的数据库。如果您在同一个堆栈上进行开发、测试和部署,您将拥有更好的时间。