我使用Flask,创建了我的第一个机器人Twilio,Dialogflow部署在 Heroku. 我的本地开发正在使用SQLite,但最终版本应该使用POSTGRES.
昨天,当我开始将数据存储到本地数据库时,当我尝试识别正在发送消息的用户时,我开始收到此错误。
这个想法是,在 db 创建用户后,我将存储他发送的每条消息和dialogflow. 但即使用户是在我的数据库中创建的,我也无法在user_id之后查询他。
由于这不是一个实际错误,但没有找到用户,我发布了下面的代码并打印了我试图用来调试的一些部分。
代码:
import os
from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from twilio.twiml.messaging_response import MessagingResponse
from sportsbot.utils import fetch_reply
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///myDB.db' #path to database and its name
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False #supress warning of changes on database
db = SQLAlchemy(app)
#app.debug = True
from sportsbot.models import User, Team, Matches, Messages
@app.route('/')
def hello():
return "hello world!"
@app.route('/whatsapp', methods=['POST'])
def sms_reply():
"Check if user is new, create user at db if it is"
phone_no = int(request.form.get('From').split(':')[1][1:])
if User.query.filter(User.user_phone_no == phone_no).count() == 0:
user = User(user_phone_no=phone_no)
db.session.add(user)
db.session.commit()
print("New user")
else:
print("User already at base")
#tring to debug
print(phone_no)
user_id = User.query.filter(User.user_phone_no == phone_no).first()
print(user_id)
msg = request.form.get('Body')
reply = fetch_reply(msg,phone_no)
"Reply to it"
print(reply['text'])
print(reply['intent'])
resp = MessagingResponse()
resp.message(reply['text'])
#message = Messages(user_id = user_id, message= msg, response=reply['text'],intent=reply['intent'])
#db.session.add(message)
#try:
# db.session.commit()
#except:
# db.session.rollback()
return str(resp)
if __name__ == "__main__":
app.run(debug=True)
用户等级:
class User(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
user_name = db.Column(db.String(80), index = True, unique = False)
user_phone_no = db.Column(db.Integer, index = True, unique = True)
team_id = db.Column(db.Integer, db.ForeignKey('team.team_id'))
def __repr__(self):
return "{}".format(self.user_name)
印刷:
User already at base
5511990046548
None
Oi! Bem Vindo ao EsporteBot. Você gostaria de saber sobre algum time ou quer a agenda de eventos da semana?
Default Welcome Intent
知道我做错了什么,因为它在 db 看到用户但之后找不到它?
这段代码
User.query.filter(User.user_phone_no == phone_no).count()
找到 1 个用户
这段代码
user_id = User.query.filter(User.user_phone_no == phone_no).first()
给出None答案