كتابة سلسلة اتصال عندما تحتوي كلمة المرور الأحرف الخاصة

StackOverflow https://stackoverflow.com/questions/1423804

سؤال

وأنا باستخدام SQLalchemy لمشروع بيثون، وأريد أن يكون سلسلة اتصال مرتبة الوصول إلى قاعدة البيانات الخاصة بي. هكذا على سبيل المثال:

engine = create_engine('postgres://user:pass@host/database')

والمشكلة هي كلمة المرور الخاصة بي يحتوي على سلسلة من الأحرف الخاصة التي تحصل على تفسير كمحددات عندما أحاول الاتصال.

وأنا أدرك أنني يمكن أن مجرد إنشاء كائن ومن ثم تمرير أوراق اعتمادي مثل هذا:

drivername  = 'postgres',
username    = 'user', 
password    = 'pass', 
host        = 'host',
database    = 'database'

ولكن يهمني كثيرا بدلا من استخدام سلسلة الاتصال إذا كان ذلك ممكنا.

ولكي نكون واضحين، هل من الممكن لترميز بلدي سلسلة الاتصال، أو الجزء كلمة المرور من سلسلة الاتصال - بحيث يمكن تحليل صحيح

هل كانت مفيدة؟

المحلول

والخطوط المائلة العكسية ليست أحرف الهروب صالحة للسلاسل عنصر URL. تحتاج إلى عنوان URL ترميز جزء كلمة المرور من سلسلة الاتصال:

from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engine = create_engine('postgres://user:%s@host/database' % urlquote('badpass'))

إذا نظرتم الى تنفيذ الدرجة المستخدمة في SQLAlchemy لتمثيل عناوين اتصال قاعدة البيانات (في sqlalchemy/engine/url.py)، يمكنك ان ترى أنها تستخدم نفس الأسلوب للهروب كلمات المرور عند تحويل الحالات URL إلى سلاسل، وأن توزيع التعليمات البرمجية يستخدم الدالة urllib.unquote_plus مكملة لاستخراج كلمة السر من سلسلة اتصال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top