Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL पर टेक्स्ट के लिए SQLAlchemy किस कॉलम प्रकार का उपयोग करता है?

ऐसा लगता है कि 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 )?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि 2002 कनेक्शन ने MAMP पर चल रहे MySQL से कनेक्ट होने वाले PHP पर कनेक्शन अस्वीकार कर दिया

  2. नवीनतम और दूसरे नवीनतम पद के बीच अंतर ढूँढना

  3. एक क्रॉन जॉब के रूप में एक MySQL क्वेरी चलाएं?

  4. MySQL त्रुटि को कैसे हल करें आप खंड से अद्यतन के लिए लक्ष्य तालिका X निर्दिष्ट नहीं कर सकते हैं?

  5. क्या कई डीएओ होना ठीक है?