问题描述
我遇到了这个问题:
django.db.utils.ProgrammingError: ('42S02',"[42S02] [Microsoft][ODBC Driver 17 for sql Server][sql Server]无效的对象名称 'MYSCHEMA.MyUnmanagedModel'。
这是一个非托管模型,所以我知道我必须提前手动创建表。
这是模型:
class MyUnmanagedModel(models.Model):
id = models.IntegerField(db_column="ID",primary_key=True)
end_year = models.IntegerField(db_column="endyear")
grade = models.CharField(db_column="grade",max_length=2)
enrollments = models.IntegerField(db_column="enrollments")
class Meta(object):
managed = False
db_table = "[MYSCHEMA].[MyModelTable]"
我已确保我的 docker 数据库包含适当的 'MYSCHEMA' 和表 'MyModelTable',并且它是根据模型(所有适当的列)适当构建的。
我正在使用 factory-boy 创建对象:这是我的工厂:
class MyUnmanagedModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = MyUnmanagedModel
database = "secondary_database"
id = factory.Sequence(lambda n: n)
end_year = 2021
grade = 1
enrollments = 1200
我在我的项目中使用了多个数据库,“secondary_database”是保存具有适当架构的数据库的数据库。
DATABASES = {
"default": {
"ENGINE": "mssql","NAME": os.environ.get("default_NAME"),"HOST": os.environ.get("default_HOST"),"USER": os.environ.get("default_USER"),"PASSWORD": os.environ.get("default_PASSWORD"),"PORT": os.environ.get("default_PORT"),"OPTIONS": {
"host_is_server": True,"driver": os.environ.get("ODBC_DRIVER"),},"secondary_database": {
"ENGINE": "mssql","NAME": os.environ.get("secondary_NAME"),"HOST": os.environ.get("secondary_HOST"),"USER": os.environ.get("secondary_USER"),"PASSWORD": os.environ.get("secondary_PASSWORD"),"PORT": os.environ.get("secondary_PORT"),
使用 Datagrip 或 Azure Data Studio,我可以连接到 secondary_database,我可以看到 MYSCHEMA 存在,我可以确认表 'MyModelTable' 存在。
当我运行 MyUnmanagedModelFactory()
时,我看到错误:
django.db.utils.ProgrammingError: ('42S02',"[42S02] [Microsoft][ODBC Driver 17 for sql Server][sql Server]Invalid object name 'MYSCHEMA.MyModelTable'. (208) (sqlExecDirectW)")
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)