هنگام migrate در ترمینال هنگام اپلود پروژه خطایی با متن
django.db.utils.DatabaseError: (1071, '1071: Specified key was too long; max key length is 1000 bytes', None)
لطفا کمکم کنید
با سلام.
لطفاً نسخه MySQL ی که از آن استفاده می کنید را مشخص کنید. در نسخه 5.6 محدودیت 1000 بایتی را دارید. این مقدار در MySQL version 5.7 (و بالاتر) به مقدار 3072 بایت افزایش یافته است.
اگر که نمی توانید نسخه MySQL را تغییر دهید و چنانچه از encoding ی مثل utf8 در DB خود استفاده می کنید، برای فیلدی از نوع مثلاً varchar به ازای هر کاراکتر سه بایت در نظر می گیرد. چک کنید فیلدی که به عنوان key هم در نظر گرفته اید کمتر از 1000 بایت نیاز داشته باشد.
لطفاً source فایلهای models پروژه را جهت بررسی بیشتر ارسال نمایید.
سلام من طبق اموزش از mysql-connector-python==8.0.29 استفاده کردم و ورژن mysql را مشخص نیست.و ببخشید من متوجه نشدم منظور از {encoding ی مثل utf8 در DB }شما چیست لطفا من رو بیشتر راهنمایی کنید. فایل های models را الان بار گذاری میکنم
account_module
# Create your models here.
class User(AbstractUser):
avatar = models.ImageField(upload_to='images/profile',verbose_name= "تصویر آواتار",null=True,blank=True)
email_active_code = models.CharField(max_length=100,verbose_name="کد فعالسازی ایمیل " )
about_user =models.TextField(null=True,blank=True,verbose_name='درباره شخص ')
addres = models.TextField(null=True,blank=True,verbose_name='آدرس')
class Meta:
verbose_name = "کاربر"
verbose_name_plural = "کاربران"
def __str__(self):
if self.first_name is not '' and self.last_name is not '':
return self.get_full_name()
return self.email
------------------------------------------------------------------------------------
article_module
# Create your models here.
class ArticleCategory(models.Model):
parent = models.ForeignKey('ArticleCategory', null=True, blank=True, on_delete=models.CASCADE,
verbose_name='دسته بندی والد')
title = models.CharField(max_length=200, verbose_name='عنوان دسته بندی')
urltitle = models.CharField(max_length=200, unique=True, verbose_name='عنوان در url')
is_avtive = models.BooleanField(default=True, verbose_name='فعال / غیرفعال')
def __str__(self):
return self.title
class Meta():
verbose_name = 'دسته بندی مقاله'
verbose_name_plural = 'دسته بندی های مقاله'
class Article(models.Model):
title = models.CharField(max_length=300, verbose_name='عنوان مقاله')
slug = models.SlugField(max_length=400, db_index=True, allow_unicode=True, verbose_name='عنوان در url')
image = models.ImageField(upload_to='images/articles', verbose_name='تصویر مقاله')
is_active = models.BooleanField(default=True, verbose_name='فعال /غیر فعال')
short_description = models.TextField(verbose_name='توضیحات کوتاه')
text = models.TextField(verbose_name='متن مقاله')
selected_categories = models.ManyToManyField('ArticleCategory', verbose_name='دسته بندی ها')
author = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="نویسنده",null=True,editable=False)
create_date = models.DateTimeField(auto_now_add=True,editable=False,verbose_name='تاریخ ثبت')
def __str__(self):
return self.title
def get_jalali_creat_date(self):
return date2jalali(self.create_date)
def get_jalali_creat_time(self):
return self.create_date.strftime('%H:%M')
class Meta():
verbose_name = 'مقاله'
verbose_name_plural = 'مقالات'
class ArticleComment(models.Model):
article = models.ForeignKey(Article,on_delete=models.CASCADE,verbose_name='مقاله')
parent = models.ForeignKey('ArticleComment',null=True ,blank=True,on_delete=models.CASCADE, verbose_name='والد')
user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='کاربر')
creat_date =models.DateTimeField(auto_now_add=True,verbose_name='تاریخ ثبت')
text =models.TextField(verbose_name='متن نظر')
class Meta():
verbose_name = 'نظر مقاله'
verbose_name_plural = ' نظرات مقالات'
def __str__(self):
return str(self.user)
----------------------------------------------------------------------------------------
contact_modoule
# Create your models here.
class ContactUs(models.Model):
title = models.CharField(max_length=300, verbose_name="عنوان")
email = models.EmailField(max_length=300, verbose_name='ایمیل')
full_name = models.CharField(max_length=300, verbose_name='نام و نام خانوادگی')
message = models.TextField(verbose_name='متن تماس با ما')
created_date = models.DateTimeField(verbose_name= 'تاریخ ایجاد' , auto_now_add=True)
response = models.TextField(verbose_name="متن پاسخ تماس با ما " ,null=True,blank=True)
is_read_by_admin = models.BooleanField(verbose_name="خوانده شده توسط ادمین" , default=False)
class Meta:
verbose_name = 'تماس با ما'
verbose_name_plural = 'لیست تماس با ما'
def __str__(self):
return self.title
class UserProfile(models.Model):
image = models.ImageField(upload_to='images')
-------------------------------------------------------------------------------------
order_module
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="کاربر")
is_paid = models.BooleanField(verbose_name="نهایی شده/نشده")
payment_day = models.DateField(null=True, blank=True, verbose_name='تاریخ پرداخت')
def __str__(self):
return str(self.user)
class Meta:
verbose_name = 'سبد خرید'
verbose_name_plural = 'سبد های خرید کاربران'
def calculate_total_price(self):
if self.is_paid:
total_amount = 0
for detail_order in self.orderdetail_set.all():
total_amount += detail_order.final_price * detail_order.count
else:
total_amount = 0
for detail_order in self.orderdetail_set.all():
total_amount += detail_order.product.price * detail_order.count
return total_amount
class OrderDetail(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name='محصول')
count = models.IntegerField(verbose_name='تعداد')
order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name="سبد خرید")
final_price = models.IntegerField(null=True, blank=True, verbose_name='قیمت نهایی تکی این محصول')
class Meta:
verbose_name = 'جزءیات سبد خرید'
verbose_name_plural = "لیست جزءیات سبد خرید"
def __str__(self):
return str(self.order)
-------------------------------------------------------------------------
product_module
# Create your models here.
class ProductBrand(models.Model):
title = models.CharField(max_length=200, verbose_name='نام برند ', db_index=True)
url_title =models.CharField(max_length=300,verbose_name='',db_index=True)
is_active=models.BooleanField(verbose_name='فعال / غیرفعال')
def __str__(self):
return self.title
class Meta:
verbose_name = 'برند'
verbose_name_plural ='برند ها'
class ProductCategory(models.Model):
title= models.CharField(max_length=300,verbose_name='عنوان', db_index=True)
url_title= models.CharField(max_length=300,verbose_name="عنوان در url", db_index=True )
is_active= models.BooleanField(verbose_name="فعال / غیرفعال")
is_delete = models.BooleanField(verbose_name="حذف شده / نشده")
def __str__(self):
return f'{self.title}-{self.url_title}'
class Meta:
verbose_name = "دسته بندی"
verbose_name_plural = "دسته بندی ها"
class Product(models.Model):
title = models.CharField(max_length=300,verbose_name='عنوان محصول')
category = models.ManyToManyField(
ProductCategory,
related_name="products_categories",
verbose_name='دسته بندی ها')
image = models.ImageField(upload_to='images/products',null=True,blank=True,verbose_name="تصویر محصول")
brand=models.ForeignKey(ProductBrand,on_delete=models.CASCADE,verbose_name="برند",null=True,blank=True)
price = models.IntegerField(verbose_name="قیمت")
short_description = models.CharField(max_length=360, null=True,verbose_name="توضیحات کوتاه", db_index=True)
description = models.TextField( db_index=True,verbose_name="توضیحات اصلی")
is_active = models.BooleanField(default=False,verbose_name="فعال / غیرفعال")
slug = models.SlugField(default='', null=False, blank=True,max_length=200,unique=True,verbose_name='عنوان در url')
is_delete = models.BooleanField(verbose_name="حذف شده / نشده")
def __str__(self):
return f"{self.title}({self.price})"
def save(self, *args, **kwargs):
# self.slug = slugify(self.title)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse('product_detail',args=[self.slug])
class Meta:
verbose_name = "محصول"
verbose_name_plural = "محصولات"
class ProductTags(models.Model):
caption=models.CharField(max_length=200,verbose_name="عنوان", db_index=True)
product=models.ForeignKey(Product,on_delete=models.CASCADE,related_name="products_tags")
def __str__(self):
return self.caption
class Meta:
verbose_name="تگ محصول"
verbose_name_plural="تگ های محصولات"
class ProductVisit(models.Model):
product = models.ForeignKey('Product',on_delete=models.CASCADE,verbose_name='محصول')
ip = models.CharField(max_length=35,verbose_name='آی پی')
user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='کاربر',blank=True,null=True)
def __str__(self):
return f"{self.product.title} / {self.ip}"
class Meta:
verbose_name="بازدید محصول"
verbose_name_plural="بازدید های محصول"
class ProductGallery(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="products_gallery",verbose_name='محصول')
image = models.ImageField(upload_to='images/products_galley',verbose_name="تصاویر گالری محصول")
def __str__(self):
return self.product.title
class Meta:
verbose_name = "تصویر گالری"
verbose_name_plural = "تصاویر گالری"
=======================================================
site_module
class SiteSetting(models.Model):
site_name = models.CharField(max_length=200,verbose_name='نام سایت')
site_url = models.CharField(max_length=200,verbose_name='دامنه سایت')
phone = models.CharField(max_length=200,null=True,blank=True,verbose_name='تلفن ')
addres = models.CharField(max_length=200,verbose_name='ادرس ')
fax = models.CharField(max_length=200,null=True,blank=True, verbose_name='فکس ')
email = models.CharField(max_length=200,null=True,blank=True, verbose_name='ایمیل ')
copy_right = models.TextField(verbose_name='متن کپی رایت سایت')
about_us_text = models.TextField(verbose_name='متن درباره ما سایت')
site_logo = models.ImageField(upload_to='images/site-setting',verbose_name='لوگو سایت')
is_main_setting = models.BooleanField(verbose_name='تنظیمات اصلی')
class Meta:
verbose_name = 'نتظیمات سایت'
verbose_name_plural = 'تنظیمات'
def __str__(self):
return self.site_name
class FooterLinkBox(models.Model):
title = models.CharField(max_length=200,verbose_name='عنوان')
class Meta:
verbose_name='دسته بندی لینک های فوتر'
verbose_name_plural= 'دسته بندی های لینک های فوتر'
def __str__(self):
return self.title
class FooterLiink(models.Model):
title = models.CharField(max_length=200,verbose_name='عنوان')
url = models.URLField(max_length=500,verbose_name='لینک')
footer_link_box = models.ForeignKey(to=FooterLinkBox,on_delete=models.CASCADE,verbose_name='دسته بندی')
class Meta:
verbose_name=' لینک فوتر'
verbose_name_plural= 'لینک های فوتر'
def __str__(self):
return self.title
class Slider(models.Model):
title = models.CharField(max_length=200,verbose_name='عنوان')
url = models.URLField(max_length=500,verbose_name='لینک')
url_title = models.CharField(max_length=200,verbose_name='عنوان لینک')
descripton = models.TextField(verbose_name='توضیحات اسلایدر')
image = models.ImageField(upload_to= 'images/sliders',verbose_name="تصویر اسلایدر")
is_active = models.BooleanField(default=True,verbose_name='فعال / غیرفعال')
class Meta:
verbose_name= "اسلایدر"
verbose_name_plural= 'اسلایدر ها'
def __str__(self):
return self.title
class SiteBanner(models.Model):
class SiteBannerPositions(models.TextChoices):
product_list = 'product_list', 'صفحه لیست محصولات',
product_detail = 'product_detail' , 'صفحه جزییات محصولات',
about_us = 'about_us' , 'صفحه درباره ما',
title = models.CharField(max_length=200,verbose_name='عنوان بنر')
url = models.URLField(max_length=400,null=True,blank=True,verbose_name='آدرس بنر')
image = models.ImageField(upload_to='images/banners', verbose_name="تصویر بنر")
is_active = models.BooleanField(verbose_name='فعال / غیرفعال')
position = models.CharField(max_length=200,choices=SiteBannerPositions.choices, verbose_name='جایگاه نمایشی')
def __str__(self):
return self.title
class Meta:
verbose_name= "بنر تبلیغاتی"
verbose_name_plural= 'بنرهای تبلیغاتی '
======================================================
درایوری که برای ارتباط با MySQL نصب کردید (mysql-connector-python) ، از نسخه 5.5 تا 8 MySQL را support می کند. ولی منظور من نسخه ی خود MySQLی است که شما استفاده می کنید.
نوشته بودید که:
هنگام اپلود پروژه
با این مشکل مواجه شدید. در hosting ی که دارید، نسخه MySQL را چک کنید.
به هر حال، با فرض اینکه نسخه MySQL ی که از آن استفاده می کنید، 5.6 ( یا قبل تر ) باشد، به عنوان یک راه حل این تغییر را امتحان کنید.
مقدار max_length را در فیلد زیر به عدد نهایتاً 250 ( محض احتیاط 240 ) تغییر دهید:
slug = models.SlugField(max_length=400, db_index=True, allow_unicode=True, verbose_name='عنوان در url')
توضیح در مورد:
چنانچه از encoding ی مثل utf8 در DB خود استفاده می کنید
به طور خلاصه: یعنی اگر از کاراکترهای فارسی در فیلد خود استفاده می کنید که با توجه به allow_unicode=True به احتمال قوی، همینطور است.
سلام دوست من
پاسخ دوستمون weby رو بررسی کنین. این مورد در نسخه های مربوط به MySql های قدیمی تر ایجاد میشه
البته هاستینگ ها معمولا از نسخه های بروزتر استفاده میکنن اما ممکنه گاها این مشکل ایجاد میشه
به واحد پشتیبانی هم تیکت بزنین در این مورد
سلام و تشکر از شما اساتید ورژن mysql بنده طبق عکس زیر 10.2.40 هست و تغییراتی که گفتید انجام شد ولی باز همان ارور به وجود امد.طبق گفته شما (mysql-connector-python) تا ورژن 8 را میتواندsupport کند. ایا مشکل مربوط
مربوط به این هست؟ واقا به راهنماییتون نیاز دارم
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying account_module.0001_initial... OK
Applying account_module.0002_remove_user_mobile_user_avatar... OK
Applying account_module.0003_user_about_user... OK
Applying account_module.0004_alter_user_avatar... OK
Applying account_module.0005_user_addres... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying article_module.0001_initial... OK
Applying article_module.0002_alter_articlecategory_title_and_more... OK
Applying article_module.0003_alter_articlecategory_urltitle... OK
Applying article_module.0004_articlecategory_parent... OK
Applying article_module.0005_article...Traceback (most recent call last):
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/mysql/connector/django/base.py", line 149,in execute
return self.cursor.execute(query, new_args)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/mysql/connector/cursor_cext.py", line 277,in execute
self._handle_result(result)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/mysql/connector/cursor_cext.py", line 180,in _handle_result
raise errors.get_mysql_exception(*self._warnings[0][1:3])
mysql.connector.errors.DatabaseError: 1071: Specified key was too long; max key length is 1000 bytes
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/core/management/__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/core/management/base.py", line 414,in run_from_argv
self.execute(*args, **cmd_options)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/core/management/base.py", line 460,in execute
output = self.handle(*args, **options)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/core/management/base.py", line 98, in wrapped
res = handle_func(*args, **kwargs)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 290, in handle
post_migrate_state = executor.migrate(
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/migrations/executor.py", line 131, in migrate
state = self._migrate_all_forwards(
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/migrations/executor.py", line 163, in _migrate_all_forwards
state = self.apply_migration(
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/migrations/executor.py", line 251, in apply_migration
migration_recorded = True
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 157, in __exit__
self.execute(sql)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 192, in execute
cursor.execute(sql, params)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/utils.py", line 103, inexecute
return super().execute(sql, params)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/django/db/backends/utils.py", line 89, in _execute
return self.cursor.execute(sql, params)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/mysql/connector/django/base.py", line 149,in execute
return self.cursor.execute(query, new_args)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/mysql/connector/cursor_cext.py", line 277,in execute
self._handle_result(result)
File "/home/skyhouse/virtualenv/django_toplearn_project/3.8/lib/python3.8/site-packages/mysql/connector/cursor_cext.py", line 180,in _handle_result
raise errors.get_mysql_exception(*self._warnings[0][1:3])
django.db.utils.DatabaseError: (1071, '1071: Specified key was too long; max key length is 1000 bytes', None)
(django/toplearn/project:3.8)[skyhouse@chita django_toplearn_project]$
به نظر می رسد که از MariaDB استفاده می کنید (که یک fork از MySQL است) و مطمئن نیستم که آیا درایوری که از آن استفاده کردید، برای این نیز مناسب هست یا خیر.
در این مورد خیلی جستجو کردم و بیشتر، از سازگاری درایورها(ی موجود پایتون برای MySQL) با MariaDB صحبت شده بود. در نهایت به این لینک رسیدم و طبق آن باید تغییراتی در config فایل mysql/mariadb انجام دهید.
امیدوارم مشکل حل شود.
یک نکته ای که وجود داره اینه که اگر برای ستون های جداولتون از index_db استفاده کرده باشین و اون ستون ها تعداد کاراکتر های زیادی داشته باشن دیتابیس با مشکل مواجه میشه
مدل هایی که ایجاد کردین رو بررسی کنین که index دارن یا خیر و اگر دارن باید تعداد کاراکتر های اونها رو مدیریت کنین
بله استاد، در فیلد slug مقدار max-length برابر 400 بود که با توجه به index بودن و unicode بودن آن، پیشنهاد شد که به 200 تغییر داده شود. ( چون به ازای هر کاراکتر یونیکد، 3 تا 4 بایت در نظر می گیرد که برای 400 کاراکتر، بیش از 1000 بایتی می شود که در پیام خطا هم ذکر شده)
سلام خدمت اساتید عزیز با عرض تشکر از شما بابت وقتی که گذاشتید.
استاد من همه ی فیلد هارو اصلاح کرد همه جوره تست کردم با db_index=false va True باز اوکی نشد البته داخل سی پنل ادیت میکردم حتی گفتم شاید باگ پروژه خودم باشه ولی فایل قسمت 136 شمارم باز اپلود کردم درست نشد دقیقا همین ارور روبه رو شدم خواستم بدونم شما سی پنلی که استفاده کریدی کدام ورژن mysql بوده و اگر من بخوام تیکت بزنم با چه مظمونی باشد که mysql من رو تغییر دهند که مانند شما اپلود کنم. با تشکر فراوان از شما راستی من از مشهد هاست طبق پیشنهاد شما استفاده میکنم . راه حلی دارید ممنون میشوم کمکم کنید
به پشتیبانی سایت تیکت بزنین که قصد دارین که mysqlclient رو در terminal نصب کنین اما سرور ارور میده و اجازه ی نصب این پکیج رو نمیده. ازشون بخواین که این مشکل رو برطرف کنن
سلام استاد اردوخانی تو پارس وب سرور سرور جنگو تهیه کردم مشکل بر طرف شد در عاست دیگر ولی تیکت هم زدم به مشهد هاست بازم تشکر از شمااا
با سلام.
دوست گرامی، اگر پاسخی از مشهد هاست دریافت کردید ممنون می شوم که در صورت امکان پاسخ را به اشتراک بگذارید.
موفق باشید.
خوشحالم مشکل برطرف شده دوست من
موفق باشین :)
متنی که گفتن اصا به درد من نخورد خیلی هاست بدیه بهم راه حلی داده که استفاده ازشم بلد نیستم .--->>
شما می توانید بجای مورد درخواستی، پس از ویرایش فایل init.py از ماژول pymysql استفاده نمایید.
لینک زیر را بررسی بفرمائید.
https://stackoverflow.com/questions/46902357/error-loading-mysqldb-module-did-you-install-mysqlclient-or-mysql-python
با احترام
واحد پشتیبانی - کاشی
ممنون از شما
متشکرم. لطف کردید.