/ / फ्लास्क-माइग्रेट वैल्यूएयर में: पोजीशन 15 में कनेक्शन स्ट्रिंग में अमान्य इंटरपोलेशन सिंटैक्स - पायथन, मायस्कल, कनेक्शन-स्ट्रिंग, फ्लास्क-स्क्वैल्सीमे, फ्लास्क-माइग्रेट

फ्लास्क-माइग्रेट वैल्यूएयर में: पोज़िशन 15, पाइथन, मायस्कल, कनेक्शन-स्ट्रिंग, फ्लास्क-स्क्वैल्सीमी, फ्लास्क-माइग्रेट में कनेक्शन स्ट्रिंग में अमान्य इंटरपोलेशन सिंटैक्स

मै इस्तेमाल कर रहा हूँ flask migrate फ्लास्क- sqlalchemy के साथ फ्लास्क में डेटाबेस निर्माण और माइग्रेशन के लिए।

जब तक मैं अपने डेटाबेस यूजर पासवर्ड "@" को बदल देता हूं तब तक सब कुछ ठीक चल रहा था, तब इसने काम करना बंद कर दिया, मैंने अपने कोड को अपडेट किया जब पासवर्ड में विशेष वर्ण हों, तो कनेक्शन स्ट्रिंग लिखना

यह अनुप्रयोग के लिए काम कर रहा है, लेकिन फ्लास्क-माइग्रेशन के लिए नहीं, माइग्रेट करते समय इसकी त्रुटि दिखाई दे रही है

यानी पर python manage.py db migrate

ValueError: invalid interpolation syntax in u"mysql://user:p%40ssword@localhost/testdb" at position 15

यहाँ पासवर्ड है p@ssword और इसके द्वारा भाग गया urlquote (प्रश्न लिंक के ऊपर देखें)।

पूर्ण त्रुटि स्टैक:

Traceback (most recent call last):
File "manage.py", line 20, in <module>
manager.run()
File "/usr/local/lib/python2.7/dist-packages/flask_script/__init__.py", line 412, in run
result = self.handle(sys.argv[0], sys.argv[1:])
File "/usr/local/lib/python2.7/dist-packages/flask_script/__init__.py", line 383, in handle
res = handle(*args, **config)
File "/usr/local/lib/python2.7/dist-packages/flask_script/commands.py", line 216, in __call__
return self.run(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/flask_migrate/__init__.py", line 177, in migrate
version_path=version_path, rev_id=rev_id)
File "/usr/local/lib/python2.7/dist-packages/alembic/command.py", line 117, in revision
script_directory.run_env()
File "/usr/local/lib/python2.7/dist-packages/alembic/script/base.py", line 407, in run_env
util.load_python_file(self.dir, "env.py")
File "/usr/local/lib/python2.7/dist-packages/alembic/util/pyfiles.py", line 93, in load_python_file
module = load_module_py(module_id, path)
File "/usr/local/lib/python2.7/dist-packages/alembic/util/compat.py", line 79, in load_module_py
mod = imp.load_source(module_id, path, fp)
File "migrations/env.py", line 22, in <module>
current_app.config.get("SQLALCHEMY_DATABASE_URI"))
File "/usr/local/lib/python2.7/dist-packages/alembic/config.py", line 218, in set_main_option
self.set_section_option(self.config_ini_section, name, value)
File "/usr/local/lib/python2.7/dist-packages/alembic/config.py", line 245, in set_section_option
self.file_config.set(section, name, value)
File "/usr/lib/python2.7/ConfigParser.py", line 752, in set
"position %d" % (value, tmp_value.find("%")))
ValueError: invalid interpolation syntax in u"mysql://user:p%40ssword@localhost/testdb" at position 15

कृपया सहायता कीजिए

उत्तर:

जवाब के लिए 9 № 1

में migrations/env.py फ़ाइल, आपको वह कोड मिलेगा जो इस समस्या के लिए जिम्मेदार है।

config.set_main_option("sqlalchemy.url",
current_app.config.get("SQLALCHEMY_DATABASE_URI"))

अगर वहाँ % में संकेत SQLALCHEMY_DATABASE_URI, यह एक त्रुटि का कारण होगा।

आप इसे संपादित करके हल कर सकते हैं migrations/env.py फ़ाइल, और आक्रामक लाइन को निम्नानुसार बदलना

db_url_escaped = current_app.config.get("SQLALCHEMY_DATABASE_URI").replace("%", "%%")
config.set_main_option("sqlalchemy.url", db_url_escaped)

और देखें set_main_option का प्रलेखन:

ध्यान दें कि यह मान ConfigParser को दिया गया है।सेट, जो pyformat (जैसे% (some_value) s) का उपयोग करते हुए परिवर्तनशील प्रक्षेप का समर्थन करता है। एक कच्चे प्रतिशत का संकेत एक प्रक्षेप प्रतीक का हिस्सा नहीं है इसलिए बच जाना चाहिए, उदा। %%। दिए गए मान प्रक्षेपित प्रारूप का उपयोग करके फ़ाइल में पहले से मौजूद एक और मूल्य को संदर्भित कर सकते हैं।


उत्तर № 2 के लिए -1

मेरे पास इस मुद्दे का हल होने के बाद भी इसका अनुभव है।

स्ट्रिंग को urlencode करने के बाद db कनेक्शन URI में "%" (प्रतिशत संकेत) के साथ एक समस्या है।

मैंने प्रतिशत चिह्न को दोहरे के साथ प्रतिस्थापित करने का प्रयास कियाप्रतिशत संकेत ("%%") जो मुझे प्रक्षेप त्रुटि के बाद मिलता है। हालाँकि, यह गलत पासवर्ड के कारण डेटाबेस से कनेक्ट नहीं हो सका।

समाधान I "अभी के लिए जा रहा है का उपयोग करने से बचने के लिए हैमेरे db पासवर्ड में "%"। एक संतोषजनक समाधान नहीं है, लेकिन अभी के लिए करेंगे। मैं इस मुद्दे के "गठजोड़" में एक नोट करूँगा। अपने पैकेज में RawConfigParser का उपयोग करने वाले इस मुद्दे से बचने में मदद कर सकते हैं।


उत्तर № 3 के लिए -1

आप देखना चाहते हैं http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#mysql-unicode मैं अपने पासवर्ड और mysql कनेक्टर के साथ एक ही समस्या रख रहा था। mysql + pymysql कनेक्टर का उपयोग करने से मुझे एप्लिकेशन और माइग्रेशन स्क्रिप्ट में कनेक्ट करने की अनुमति मिली।