Mohssen A Mohssen نشر 18 مارس 2022 أرسل تقرير نشر 18 مارس 2022 أحاول نقل قاعدة البيانات الخاصة بمشروع جانغو Django من فلاش USB، قاعدة البيانات من نوع sqlite3 أي أنها مجرد ملف واحد، وقمت بتنفيذ الكود التالي لعمل هذه العملية: os.rename(temp_databse, settings.DATABASES['testing']['NAME']) وهنا مسار قاعدة البيانات الجديد في ملف settings.py: 'testing': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/home/mohssen/projects/learning/db/learning.sqlite3', }, ولكن يظهر لي الخطأ التالي: OSError: [Errno 18] Invalid cross-device link لم أفهم معنى هذا الخطأ، ولا سببه، كيف أنقل قاعدة البيانات برمجيًا بشكل سليم؟ 1 اقتباس
1 سامح أشرف نشر 21 مارس 2022 أرسل تقرير نشر 21 مارس 2022 بالطبع يمكن إستخدام التابع os.rename لنقل ملف ما، ولكن لكي يعمل هذا التابع يجب أن يكون الملف الأصلي والمسار الذي سيتم نقله إليه في نفس نظام الملفات File System (على نفس القرص Partition) الخطأ Invalid cross-device link ليس مشكلة في جانغو Django بل ناجم عن نقل ملف من نظام ملفات مختلف File System، حيث أن التابع os.rename يعمل فقط في حالة كان الملف موجود في نظام ملفات معين وتريد نقله إلى مكان آخر ضمن نفس نظام الملفات، بينما في حالتك فإن نقل ملف من نظام ملفات إلى نظام ملفات مختلف (من قرص Partition إلى قرص آخر USB) لا يمكن أن يتم بإستخدام التابع os.rename. >>> import os >>> os.getcwd() # المسار الحالي، في القرص D: '/mnt/d/temp' >>> os.rename('test.txt', '/mnt/e/test.txt') # لا يمكن نقل الملف إلى القرص E: Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 18] Invalid cross-device link: 'test.txt' -> '/mnt/e/test.txt' >>> os.rename('test.txt', '/mnt/d/test.txt') # بينما سيعمل الكود إذا نقلنا الملف إلى مكان آخر ضمن نفس نظام الملفات >>> يمكنك أن تستعمل التابع shutil.move لهذه العملية، على النحو التالي: >>> import os, shutil >>> os.getcwd() '/mnt/d/temp' >>> shutil.move('test.txt', '/mnt/e/test.txt') '/mnt/e/test.txt' >>> ملاحظة: التابع shutil.move سوف يُظهر نفس الخطأ كذلك إن كنت تستعمل Python 2، بينما إذا كنت تستعمل Python 3 فسوف يعمل كل شيء على ما يرام، ولحل المشكلة بالنسبة لـ Python 2 فيمكنك نسخ الملف عبر التابع shutil.copy ثم حذف الملف الأصلي عبر التابع os.remove 2 اقتباس
0 Abdollahi Mohammed نشر 19 مارس 2022 أرسل تقرير نشر 19 مارس 2022 السؤال ليس واضحا اخي الى اين تريد نقل قاعدة البيانات وانت تستخدم الدالة rename في الشفرة البرمجية وهذه تقوم باعادة تسمية الملف. برجاء التوضيح اكثر اقتباس
السؤال
Mohssen A Mohssen
أحاول نقل قاعدة البيانات الخاصة بمشروع جانغو Django من فلاش USB، قاعدة البيانات من نوع sqlite3 أي أنها مجرد ملف واحد، وقمت بتنفيذ الكود التالي لعمل هذه العملية:
وهنا مسار قاعدة البيانات الجديد في ملف settings.py:
ولكن يظهر لي الخطأ التالي:
لم أفهم معنى هذا الخطأ، ولا سببه، كيف أنقل قاعدة البيانات برمجيًا بشكل سليم؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.