2009-11-04 12 views
16

मैंने स्क्लेक्लेमी के लिए एक न्यूनतम डेटाबेस बोली लिखा है जो वास्तव में कोर में नहीं है। मैं इसे अपने पायथन पैकेज के रूप में कैसे काम करूं?मैं स्क्लाक्लेमी के लिए बाहरी बोली कैसे लिखूं?

उत्तर

12

जब SQLAlchemy डेटाबेस यूआरएल example://... हल करता है तो यह पहले इसे import sqlalchemy.dialects.example में खोजने का प्रयास करेगा। यदि यह काम नहीं करता है तो यह pkg_resources.iter_entry_points('sqlachemy.databases') पर वापस आता है।

एक पैकेज setuptools का उपयोग करने में नई बोली रखो, अपने बोली, python setup.py develop या python setup.py install चलाने के नाम पर एक प्रवेश बिंदु शामिल हैं, और SQLAlchemy बोली लगाने के लिए सक्षम होना चाहिए।

setup.py में:

entry_points = { 
    'sqlalchemy.databases': ['example = example_sa:base.dialect',] 
    }, 

example_sa:base.dialectimport example_sa; return example_sa.base.dialect का मतलब है।

इस पैकेज को स्थापित करने के बाद, pkg_resources.iter_entry_points(group)group से pkg_resources.EntryPoint उदाहरण उत्पन्न करता है। .load() पर EntryPoint पर entrypoint.name='example' पर कॉल करें और आपको example_sa.base.dialect मिलें।

मुझे सुखद आश्चर्य हुआ कि SQLAlchemy 0.6 के लिए नई बोलियां लिखना कितना आसान है। यदि आपके डेटाबेस में मानक एसक्यूएल की तुलना में केवल कुछ क्विर्क हैं, तो संभावना है कि आप मानक (MySQL- like) SQL बोली से प्राप्त करने में सक्षम होंगे, अपने डेटाबेस के कीवर्ड को परिभाषित करेंगे, और उन quirks के कार्यान्वयन की प्रतिलिपि बनाएँ (जैसे SELECT ... LIMIT 10 के बजाय) एक मौजूदा बोली से।

+1

SQLAlchemy 0.5 में प्रवेश बिंदु sqlalchemy.databases –

0

कम से कम SQLAlchemy 5.x में आप डाटाबेस निर्देशिका में अपने ड्राइवर/बोली को छोड़ सकते हैं, जहां भी आपके सिस्टम पर है, (यदि आप स्रोत से स्थापित हैं, तो यह/usr/local/lib/python2 हो सकता है। 7/dist-packages/SQLAlchemy-0.5.8-py2.7.egg/sqlalchemy/डेटाबेस)

16

SQLAlchemy 0.8 के रूप में, आप अलग-अलग इंस्टॉल करने की आवश्यकता के बिना बोली प्रक्रियाओं को पंजीकृत कर सकते हैं।

from sqlalchemy.dialects import registry 
registry.register("mysql.foodialect", "myapp.dialect", "MyMySQLDialect") 

ऊपर create_engine("mysql+foodialect://") का जवाब और myapp.dialect मॉड्यूल से MyMySQLDialect वर्ग लोड होगा।

देखें: http://sqlalchemy.readthedocs.org/en/latest/core/connections.html#registering-new-dialects

+0

यह मेरे लिए काम करता कहा जाता है। –

संबंधित मुद्दे