我正在尝试使用 Flask 和 Heroku 在线迁移我的数据库。我创建了一个名为 userinfo.db 的数据库,它包含用户名和密码,为了安全起见,后者经过哈希处理,因此我自然地将字符限制设置为 80。在我的本地服务器上,我没有遇到任何问题,但迁移后我得到了这个错误:
sqlalchemy.exc.DataError: (psycopg2.errors.StringDataRightTruncation) value too long for type character varying(80)
我在网上搜索,听起来psychopg正在将其转换为二进制,这会增加字符串的大小。我尝试将数据库调整为 TEXT 而不是 VARCHAR,但奇怪的是,在进行更改、将其提交到 github,甚至重新启动我的网站后,此错误消息仍然出现。这不再是我的数据库的样子,为什么呢?我已经检查过了,它不能引用另一个数据库(只有这个数据库包含用户名、密码和一个额外的昵称字段,所有这些都在错误消息中引用)
这是我第一次部署网站,所以还有很多不明白的地方。这是我的代码的重要部分:
app = Flask(__name__)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), nullable=False, unique=True)
password = db.Column(db.Text, nullable=False)
nickname = db.Column(db.String(20), nullable=False)
很有可能在您进行更改后,Heroku 确认了更改并重新启动了应用程序,但是数据库架构并未更新。 Alembic 不会自动检测模型中的类型更改。
您需要创建一个脚本来手动更改列类型。