首页 > 解决方案 > django 的 Azure SQL 数据库连接错误

问题描述

对于我的 Django Web 应用程序,我在运行时遇到了这个错误,python manage.py makemigrations 我用谷歌搜索这个问题无法找到解决方案。有人可以帮我找到解决这个问题的方法吗,我是初学者。

File "D:\Azure\newDjango\.venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "D:\Azure\newDjango\.venv\lib\site-packages\sql_server\pyodbc\base.py", line 546, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Invalid object name 'core_profilefeeditem'. (208) (SQLExecDirectW)")

settings.py的数据库连接文件

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': '<db-name>',
        'USER': '<db-username>',
        'PASSWORD': '<db-passord>',
        'HOST': '<servername>.windows.net',
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 13 for SQL Server',
            'MARS_Connection': 'True',
        }
    }
}

我的models.pywhere 用户个人资料页面使用 rest_framwork 作为端点更新他们的图像以显示用户详细信息和图像

from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import BaseUserManager
from django.conf import settings
import uuid

# Create your models here.


def image_name_change(instance, filename):
    ext = filename.split('.')[-1]
    filename = f'{uuid.uuid4()}.{ext}'
    return filename

# Changing the default authentication
# ? https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#auth-custom-user


class UserProfileManager(BaseUserManager):
    """Manager of User Profile"""

    def create_user(self, email, name, password=None):
        """Create new user profile"""
        if not email:
            raise ValueError("User must have an email address")

# ? https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#django.contrib.auth.models.BaseUserManager.normalize_email

        # Normalizes email addresses by lowercasing the domain portion of the email address.
        email = self.normalize_email(email)
        user = self.model(email=email, name=name)

        user.set_password(password)  # to ensure encrypt password
        user.save(using=self._db)
        return user

    def create_superuser(self, email, name, password):
        """Create and save new superuser with given details"""
        user = self.create_user(email, name, password)

        user.is_superuser = True
        user.is_staff = True
        user.save(using=self._db)

        return user


class UserProfile(AbstractBaseUser, PermissionsMixin):
    """Databse model for users in the system"""
    email = models.EmailField(
        max_length=150, unique=True, null=False, blank=False)
    name = models.CharField(max_length=150)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = UserProfileManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    def get_full_name(self):
        """Retrieve full name of user"""
        return self.name

    def get_short_name(self):
        """Retrieve short name of user"""
        return self.name

    def __str__(self):
        """Return string reperesentation of our user"""
        return self.email

    class Meta:
        # this used to change the model name that appear in admin page
        verbose_name = "User Profile"
        verbose_name_plural = "User Profiles Plural"  # change model name in Admin panel


class ProfileFeedItem(models.Model):
    """Profile status update"""
    user_profile = models.ForeignKey(
        'UserProfile',
        on_delete=models.CASCADE,
    )
    image = models.ImageField(upload_to=image_name_change)
    created_on = models.DateTimeField(auto_now_add=True)


class ImageItem(models.Model):
    user_id = models.ForeignKey('ProfileFeedItem', on_delete=models.DO_NOTHING)
    image1 = models.ImageField(upload_to='media/')

标签: pythondjangoazureazure-sql-database

解决方案


上述问题的答案是删除except文件migrations夹下的所有文件,如果您已经使用本地数据库(),还删除文件夹。app_name__init__.py__pycache__db.sqlite3

这里的主要问题是我们需要在创建任何模型之前迁移(python manage.py makemigrations和)。python manage.py migrate

如果在这些文件( , )中创建了任何model内部models.py注释,则将这些行及其相关导入注释掉并应用迁移。views.pyserializers.py

然后取消注释这些行并应用迁移。


推荐阅读