Sepertinya SQLAlchemy mendukung LONGTEXT:
$ python
Python 2.7.13 (default, Sep 29 2017, 15:31:18)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqlalchemy.dialects.mysql import LONGTEXT
>>>
Lihat cara menggunakan jenis khusus vendor di sini:http ://docs.sqlalchemy.org/en/latest/core/type_basics.html#vendor-specific-types
Untuk apa nilainya, mencoba mengembangkan lapisan basis data yang benar-benar netral merek itu sulit, dan jarang sepadan dengan usaha. Saya bekerja di Zend Framework 1.0 beberapa tahun yang lalu, dan saya mencoba membuat suite pengujian unit generik untuk semua database SQL yang didukung oleh framework itu. Saya menemukan bahwa sangat sedikit tipe data yang didukung dengan cara yang sama di semua implementasi SQL, meskipun semuanya mengklaim mendukung standar ANSI/ISO SQL.
Pada akhirnya, Anda harus mengembangkan hierarki kelas Anda sendiri untuk lapisan data Anda, dan menerapkan kode yang sedikit berbeda untuk setiap adaptor khusus basis data.
Pembaruan:Saya pikir beritanya lebih baik dari yang kami kira. Saya mencoba tes ini:
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)
Kemudian saya memeriksa untuk melihat apa yang akhirnya dibuat di database 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
Jadi itu memetakan String
generik SQLAlchemy tipe data ke tipe data MySQL yang kurang lebih sesuai.
Tidak mengherankan bagi saya bahwa itu menggunakan tipe data yang lebih besar dari yang kita harapkan. MEDIUMTEXT
mendukung 16MB dalam byte , bukan dalam karakter . Karena set karakter default saya adalah utfmb4 multi-byte, panjang maksimal MEDIUMTEXT
sebenarnya jauh lebih sedikit dari 2^24 karakter. Jadi harus diupgrade ke LONGTEXT
. Tentu saja, 2^32 karakter tidak akan muat di LONGTEXT
juga, tetapi tampaknya SQLAlchemy menganggap Anda bermaksud membuat kolom.
Saya masih berpikir bahwa sulit untuk melakukan kode implementasi-netral sepenuhnya. Misalnya, bagaimana jika Anda ingin menggunakan beberapa fitur MySQL seperti opsi tabel untuk mesin penyimpanan, atau tipe data tertentu tanpa padanan umum (misalnya, ENUM
)?