Python 将表格的数据类型转换为Alchemy中的MEDIUMTEXT或LONGTEXT MySQL文本类型的大小为64KB
如果我想创建一个更大的文本表,比如MEDIUMTEXT或LONGTEXT 我已经用String('big number')尝试过这个方法,比如String(1000000),它只对SQLAlchemy有效,而不是在Flask SQLAlchemy中 那么,高射炮的问题在于炼金术吗?还是出了什么事 使用前 例如:Python 将表格的数据类型转换为Alchemy中的MEDIUMTEXT或LONGTEXT MySQL文本类型的大小为64KB,python,mysql,sqlalchemy,pymysql,Python,Mysql,Sqlalchemy,Pymysql,如果我想创建一个更大的文本表,比如MEDIUMTEXT或LONGTEXT 我已经用String('big number')尝试过这个方法,比如String(1000000),它只对SQLAlchemy有效,而不是在Flask SQLAlchemy中 那么,高射炮的问题在于炼金术吗?还是出了什么事 使用前 例如: from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Post(db.Model): title =
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Post(db.Model):
title = db.Column(db.String(60))
body = db.Column(db.Text())
当前使用和它的工作!
Text()中的较大数字将自动在MySQL中创建一个大文本数据类型。10000000将转换为longtext。我尝试了以下测试:
t2 = Table('t2', metadata,
Column('id', Integer, primary_key=True),
Column('t1', String(64000)),
Column('t2', String(16000000)),
Column('t3', String(4294000000)),
Column('t4', Text)
)
metadata.create_all(engine)
然后我检查了一下它在MySQL数据库中最终创建了什么:
mysql> show create table t2;
CREATE TABLE `t2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`t1` mediumtext,
`t2` longtext,
`t3` longtext,
`t4` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
因此,它确实将SQLAlchemy的通用字符串数据类型映射到或多或少合适的MySQL数据类型
(以上是从2017年我的答案复制到的。从那时起我就没有做过这个测试。)我尝试使用文本(10000000)来转换它。幸运的是,它起作用了
我查找我的MySQL,它运行良好,在pymysql
mysql> SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='post' and COLUMN_NAME = 'body';
+-----------+
| DATA_TYPE |
+-----------+
| text |
| longtext |
+-----------+
那么,我的问题完成了谢谢!我知道这对炼金术有效。但我使用的是Flask SQLAlchemy,我不知道在CentOS服务器上通过Flask SQLAlchemy和pymysql来实现这个效果。也许问题出在pymysql上。因为我在本地测试中没有错误。好吧,我没有意识到Flask SQLAlchemy是一个不同的实现。无论如何,上面的答案至少是一个测试用例。祝你好运非常感谢。你给了我一个想法,让我多想想。64000>64KB,因此它将是mediumtext。我认为Alchemy不支持这种转换方式。我尝试使用文本(100000)或更大的数字,它可以工作!
mysql> SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='post' and COLUMN_NAME = 'body';
+-----------+
| DATA_TYPE |
+-----------+
| text |
| longtext |
+-----------+