【问题标题】:django model to access databasedjango模型访问数据库
【发布时间】:2019-07-24 12:43:19
【问题描述】:

向 django 社区请求一些帮助。 我是 Django 的新手。我的要求是

  1. 创建一个 DRF,它将在现有数据库中执行存储过程(MS SQL 数据库中的主数据管理)并列出记录。
  2. 此外,当我们从第 1 点导航到每条记录时,我们会显示包含更多字段的记录的详细信息。

我已经创建了一个函数,它在我的view.py 文件中使用pyodbc 来实现结果并显示值。 但是我读过一些文章,其中提到作为最佳实践,最好先定义一个模型,然后再定义一个序列化程序来定义数据结构并显示它们。 问题:

  1. 为上述场景定义模型是否正确?
  2. 据我所知,每当我们创建模型时,它都会创建一个我不想要的数据库表(因为我已经拥有包含所有必要表和数据的数据库)。因此,如果第 1 点是肯定的,那么您可以参考构建不会创建表的模型。
  3. 除上述要求外,我想连接多个数据库(一个 MS SQL 数据库和一个 oracle 数据库和一个内容管理数据库),所有这些模型都应该是只读的,我的模型不应该创建任何新表.

提前致谢。

我目前正在使用此代码来实现第 1 点:

conn = pyodbc.connect(
    "Driver={ODBC Driver 11 for SQL Server}; Server=servername; PORT:60755; Database=databasename; Trusted_Connection=yes;user=user; Passoword=password")


def ClientListView(request):
    print("read")
    cursor = conn.cursor()
    ClientObjlist = conn.execute("exec [Database].[dbo].[Storedprocedure]  @doccount = '50'")
    description = ClientObjlist.description

    items = []
    items = [dict(zip([key[0] for key in description], row)) for row in ClientObjlist]
    columnheader = [key[0] for key in description]
    return render(request, 'api/activelist.html', {'items': items , 'key':columnheader})
    conn.close()

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    可以在不创建新表的情况下创建模型。这就是你的做法:

    class MySP(models.Model):
        field1 = ...
        ...
    
        class Meta:
            managed = False
            db_table = 'my_sp'
    

    欲了解更多信息:https://docs.djangoproject.com/en/2.2/ref/models/options/#managed

    【讨论】:

    • 嗨,谢谢你的想法。我会试试的。有什么办法可以提及存储过程的参数吗?就像我在示例代码中提到的@doccount。
    猜你喜欢
    • 1970-01-01
    • 2017-12-17
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多