كيف يتم حفظ الصور في قاعدة البيانات؟؟

نعم كلاهما ORM - Object Relational Mapper (سنتعرف على تفاصيله في الورشة القادمة), لكن حسب كلام صانع peewee:

SQLAlchemy is the gold standard for ORM in the Python world

يعني هو نفسه يقول أن SQLAlchemy هو أفضل ORM (ما أجمل الناس المتواضعين) :smile:

هذه مقارنة كتبها صانع peewee:

1 Like

هل تنصحني ان اخزن بيانات الصور في قاعدة البيانات ام انه لا داعي فانا اربط كل اسم صورة بال id الخاص بالكاتب وهو لا يتكرر

1 Like

ماذا تقصد ببيانات الصورة؟ تقصد filePath؟ او تقصد شي اخر؟

1 Like

هذا ما اقصده
ان يتم حفظ الا id وال path

1 Like

نعم فقط تحتاج تحفظ ال id وال path (لكي تعرف ماهو المسار لهذه الصورة)، وفي نفس الوقت يوجد علاقة بين user و photo

بحيث كل مستخدم لديه صورة واحدة، يعني في جدول المستخدم تحتاج ان تضيف حقل photo_id

1 Like

انا وجهة نظري انه يتم حفظ الصورة باسم الid الخاص باليوزر

1.jpg
2.jpg
..

وهكذا واحفظها في مجلد داخل photo خاص بالuser
وهكذا استطيع ان احصل عليها بسهولة.
ما رأيك؟؟

1 Like

طريقة جيدة، ربما ستواجه مشكلة مع صيغة الصورة :sweat_smile:

لكن انصحك بعدم تكرار اختراع العجلة… الطريقة الاعتيادية هي الاحتفاظ بمسار الملف على السيرفر وربطه جدول اليوزر بعلاقه one to one مع جدول الصور.

استاذي اتمنى أن لا أكون قد أكثرت عليك في الأسئلة لكنني استفيد جدا من نصاحكم
انظر ان اتبعت هذه الطريقة

f = request.files['photo_url']
        f.save(path.join('static/images/authors', secure_filename(f.filename)))
        x = Authors.select(Authors.id).order_by(Authors.id.desc()).limit(1).where(Authors.name == request.form['name'])
        rename('static/images/authors/'+f.filename,'static/images/authors/'+str(x[0])+'.jpg')

1 Like

وعند الاستدعاء اقعل هذا

<img src='/static/images/authors/{{article.author.id}}.jpg'>
1 Like

لا مشكلة أبداً يا صهيب, أنا سعيد بالإجابة على أسئلتك :slight_smile:

الطريقة مناسبة, ولكن أنت تغير صيغة الملف دائماً إلى jpg, ربما المستخدم رفع ملف صيغته مختلفة.

شكرا جزيلا على رحابة صدرك
وهل هذا يؤثر اذا غيرت صيغة الملف ل jpg
؟؟؟

1 Like

على الرحب والسعة دائماً يا صهيب :slight_smile:

يفضل أن تترك صيغة الملفات كما هي, لا أعتقد أنها تسبب مشكلة, لكن يبدو الأمر غريباً.

والأكثر غرابة هو عدم استعمالك للعلاقات (في قاعدة البيانات) لحل المشكلة, مع أنها تبدو الطريقة الأسلم… عموماً, كل الطرق تؤدي إلى روما :wink:

3 Likes

وصلت الفكرة انت تقصد أن اسلك طريق البرمجة الامن والطرق المثالية…كي أبقى بنفس عقلية الفريق.

:rose::rose::rose::rose::rose::rose::rose:

1 Like

استاذ ياسر هل من طريقة احصل فيها على المسار على شكل نص؟

1 Like

بالتأكيد، نحن نقوم بتمرير المسار إلى داخل الدالة

os.path.join('photos', secure_filename(f.filename))

بمعنى ممكن حفظته بهذا الشكل داخل متغير destination ثم تستعمله كيفما تريد:

destination = os.path.join('photos', secure_filename(f.filename))
f.save(destination)
1 Like