python - 如何在 SqlAlchemy 中表示 Longtext?
问题描述
我无法将大文本保存到 MySQL 数据库中。
模型如下所示(见收据栏):
class Receipt(db.Model):
id = db.Column(db.Integer, primary_key=True)
product_id = db.Column(db.String(200))
type = db.Column(Enum(ReceiptType), nullable=False)
receipt = db.Column(db.Text(), nullable=False)
source = db.Column(Enum(ReceiptSource), nullable=False)
expiry_date = db.Column(db.TIMESTAMP(), nullable=False)
account_id = db.Column(db.Integer, db.ForeignKey(Account.id), unique=True)
account = db.relationship('Account', back_populates="receipt")
SQLALchemy 中似乎没有 LongText(),所以我做了这样的迁移:
def upgrade():
connection = op.get_bind()
connection.execute("""
ALTER TABLE main_db.receipt MODIFY COLUMN receipt LONGTEXT NOT NULL;
""")
这是抛出的错误:
sqlalchemy.exc.DataError: (MySQLdb._exceptions.DataError) (1406, "Data too long for column 'receipt' at row 1")
[SQL: INSERT INTO main_db.receipt (product_id, type, receipt, source, expiry_date, account_id) VALUES (%s, %s, %s, %s, %s, %s)]
[parameters: ('com.myCompany.myApp.ios.standard.weekly', 'STANDARD', 'MILEegYJKoZIhvcNAQcCoILEazCCxGcCAQExCzAJBgUrDgMCGgUAMIK0GwYJKoZIhvcNAQcBoIK0DASCtAgxgrQEMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgEDAgEBB ... (66774 characters truncated) ... FAMZIuVFjBSqfQ0dZ0FJGtSU1dwEHJW2B8Z4uj0IzJIAlQmFcZ57lIpAlTo3zDUlTOtbZmuyhpgFlB6MQXbgm+Ewm2nCnwWwoF8v7/ZNtcma96i1X3vuujgYDYoZ/EeMWPc3Rkoea6D7POigeTg==', 'IOS', datetime.datetime(2020, 5, 8, 16, 37, 6), 14)]
(Background on this error at: http://sqlalche.me/e/9h9h)
请问我错过了什么?
解决方案
在 SQLAlchemy for MySQL 中表示长文本类型的方法是:
from sqlalchemy.dialects.mysql import LONGTEXT
class Receipt(db.Model):
id = db.Column(db.Integer, primary_key=True)
long_text = db.Column(LONGTEXT)
对于其他类型,请参阅 SQLAlchemy 文档:https ://docs.sqlalchemy.org/en/14/dialects/mysql.html#mysql-data-types
这也适用于 flask-sqlalchemy。
推荐阅读
- javascript - 如何正确检查整数(未输入小数的值)
- regex - Typescript 从字符串执行正则表达式匹配
- flutter - 如何使用按钮滚动小部件?
- c - 函数scanf的问题跳转到C中的下一个scanf
- angular - 检查对象数组中的对象是否存在于 RxJS HTTP 请求中的用户输入
- c++ - 为什么 fullName 在空格后不显示名称
- javascript - 如何在 Vue 的渲染列表中存储特定项目的数据属性值
- swift - 获取对象的所有 KeyPaths
- java - 我的“Yahtzee”代码有时会抛出一个随机数
- scala - 如何在 Spark 中使用“and”将空条件应用于 sql select?