ऐसा लगता है कि SQLAlchemy 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
>>>
यहां देखें कि विक्रेता-विशिष्ट प्रकारों का उपयोग कैसे करें:http ://docs.sqlalchemy.org/hi/latest/core/type_basics.html#vendor-specific-types
इसके लायक क्या है, पूरी तरह से ब्रांड-तटस्थ डेटाबेस परत विकसित करने की कोशिश करना मुश्किल है, और शायद ही कभी प्रयास के लायक है। मैंने कुछ साल पहले ज़ेंड फ्रेमवर्क 1.0 पर काम किया था, और मैंने उस ढांचे द्वारा समर्थित सभी SQL डेटाबेस के लिए एक सामान्य इकाई परीक्षण सूट बनाने की कोशिश की। मैंने पाया कि SQL के सभी कार्यान्वयनों में बहुत कम डेटा प्रकार उसी तरह समर्थित हैं, हालांकि वे सभी ANSI/ISO SQL मानक का समर्थन करने का दावा करते हैं।
अंततः, आपको अपने डेटा स्तर के लिए अपना स्वयं का वर्ग पदानुक्रम विकसित करना होगा, और प्रत्येक डेटाबेस-विशिष्ट एडेप्टर के लिए कोड को थोड़ा अलग तरीके से लागू करना होगा।
अपडेट:मुझे लगता है कि खबर हमारे विचार से बेहतर है। मैंने इस परीक्षण की कोशिश की:
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 के जेनेरिक String
. को मैप करता है कम या ज्यादा उपयुक्त MySQL डेटा प्रकार के लिए डेटा प्रकार।
यह मेरे लिए आश्चर्य की बात नहीं है कि इसने हमारी अपेक्षा से बड़े डेटा प्रकारों का उपयोग किया। MEDIUMTEXT
बाइट्स . में 16MB का समर्थन करता है , वर्णों . में नहीं . क्योंकि मेरा डिफ़ॉल्ट वर्ण सेट मल्टी-बाइट utfmb4 है, जिसकी अधिकतम लंबाई MEDIUMTEXT
है वास्तव में 2^24 वर्णों से बहुत कम है। इसलिए इसे LONGTEXT
. में अपग्रेड करना पड़ा . बेशक, 2^32 वर्ण LONGTEXT
में फ़िट नहीं होंगे या तो, लेकिन ऐसा प्रतीत होता है कि SQLAlchemy मानता है कि आप वैसे भी एक कॉलम बनाना चाहते हैं।
मुझे अभी भी लगता है कि पूरी तरह से कार्यान्वयन-तटस्थ कोड करना मुश्किल है। उदाहरण के लिए, क्या होगा यदि आप कुछ MySQL सुविधाओं का उपयोग करना चाहते हैं जैसे स्टोरेज इंजन के लिए तालिका विकल्प, या विशिष्ट डेटा प्रकार जिनका कोई सामान्य समकक्ष नहीं है (उदाहरण के लिए, ENUM
)?