Flask 网站无法在 AWS EC2 MySQL 服务器中插入或更新特定表

-1 投票
1 回答
34 浏览
提问于 2025-04-14 18:07

我做了一个Flask应用程序,在本地的SQL和Flask服务器上运行得很好。我还成功地把它部署到了AWS的EC2实例上,在那里我有一个MySQL服务和nginx,这样就可以在nostalggio.com上公开访问了。

这个网站的功能很简单,用户可以创建个人资料,然后每个用户可以创建游戏记录,这些记录包含他们在某个平台上的账户信息(比如,游戏记录里有平台、用户名、日期等信息)。你可以访问这个示例个人资料来帮助理解这个概念。

现在的问题是,并不是所有的数据库操作都能正常工作,而且情况有点随机,下面是一些具体的情况:

正常工作的操作:

  • 选择数据库中的行和条目
  • 更新用户信息(用户名、邮箱、密码、个人简介)
  • 完全删除游戏记录

不正常工作的操作:

  • 更新游戏记录的信息(例如,把平台从PlayStation改成Xbox)
  • 添加新的游戏记录
  • 创建新的用户

文件和代码片段太多,没法全部放在这里,但我这里有一个正常工作的例子和一个不正常工作的例子。请注意,我使用的是mysql.connector。

#Updating user bio (working) 
        mycursor.execute("UPDATE users SET bio = %s WHERE user_id = %s",(new_bio, user_id))
        mydb.commit()  

#Inserting a new user
     mycursor.execute("INSERT INTO users (user,email,password) VALUES (%s,%s,%s)",(user,email,password))
        mydb.commit()   `

再说一次,这在本地服务器上运行得很好,所以我猜测这可能与SQL语法或myphpadmin和MySQL之间的结构差异有关,尽管我很确定我已经解决了它们之间的所有差异。我也没有遇到远程连接MySQL服务器的问题。

如果你有任何想法,或者想让我分享更多代码细节,请告诉我。

我尝试查看日志以寻找错误,但并没有显示任何错误,所以我完全不知道该怎么办。

1 个回答

0

问题的原因是MySQL中某些类型的“默认值”。

我本地运行的服务器和云服务器之间有一些差异,这导致当Flask应用程序尝试创建或更新带有可选列的记录时出现了问题。例如,一个可选列本来应该默认是空字符串,但实际上却被当成了null(空值)。

撰写回答