You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django PostgreSQL默认项目中如何执行MSSQL原生SQL查询并打印结果

实现Django项目同时连接PostgreSQL与MSSQL执行查询的方案

步骤1:安装MSSQL连接依赖

首先安装Django连接MSSQL所需的库:

pip install django-mssql-backend pyodbc

如果是Linux部署环境,需要提前安装unixODBC和微软官方的MSSQL ODBC驱动。

步骤2:在配置中新增MSSQL数据库连接

修改settings.py中的DATABASES配置,在原有PostgreSQL配置的基础上新增MSSQL连接项:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'ALIAS': 'XX',
        'USER': 'XX',
        'PASSWORD': 'XX',
        'HOST': 'XX',
        'PORT': 'XX',
    },
    # 新增MSSQL配置,别名自定义为mssql
    'mssql': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': '你的MSSQL数据库名',
        'USER': 'MSSQL用户名',
        'PASSWORD': 'MSSQL密码',
        'HOST': 'MSSQL服务器地址',
        'PORT': '1433', # 默认端口可根据实际情况修改
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server', # 驱动版本和你安装的一致即可
            'extra_params': 'APP=DjangoMSSQLConn',
        }
    }
}

新增的MSSQL连接和默认PostgreSQL连接完全独立,互不影响。

步骤3:执行MSSQL查询的核心代码

你可以直接在任意视图中通过Django的多数据库连接接口执行自定义SQL,以你给出的示例查询为例:

from django.db import connections

def query_mssql(request):
    # 初始化结果变量
    query_result = []
    columns = []
    if request.method == "POST":
        # 接收页面传入的查询语句,生产环境必须做校验和权限控制
        query_sql = request.POST.get("sql", "")
        # 你给出的示例查询也可以直接写死在这里
        # query_sql = "SELECT TOP(11) * FROM dbo.UserObject WITH (NOLOCK) WHERE u_logon_name=%s"
        with connections['mssql'].cursor() as cursor:
            # 参数化查询,不要直接拼接SQL字符串,防止注入
            # 如果有查询参数,放在execute第二个参数的列表里
            # cursor.execute(query_sql, ['cc@gmail.com'])
            cursor.execute(query_sql)
            # 获取查询结果的表头
            columns = [col[0] for col in cursor.description]
            # 将结果转为字典格式,方便模板遍历
            query_result = [dict(zip(columns, row)) for row in cursor.fetchall()]
    return render(request, "你的模板文件名.html", {"columns": columns, "query_result": query_result})

步骤4:模板中展示查询结果

在模板文件中添加表单和结果展示区域:

<!-- 输入SQL的表单 -->
<form method="post">
    {% csrf_token %}
    <textarea name="sql" rows="8" cols="100" placeholder="输入MSSQL查询语句"></textarea>
    <br>
    <button type="submit">执行查询</button>
</form>

<!-- 展示查询结果 -->
{% if query_result %}
<h3>查询结果</h3>
<table border="1" cellpadding="5" cellspacing="0">
    <tr>
        {% for col in columns %}
        <th>{{ col }}</th>
        {% endfor %}
    </tr>
    {% for row in query_result %}
    <tr>
        {% for val in row.values %}
        <td>{{ val }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</table>
{% endif %}

注意事项

  • 绝对禁止直接拼接用户输入的SQL内容,必须使用参数化查询传递查询条件,避免SQL注入风险
  • 生产环境必须严格限制该功能的使用权限,仅开放给可信的管理员用户
  • 可以给查询添加超时限制,避免慢查询影响MSSQL服务正常运行

内容的提问来源于stack exchange,提问作者tcblue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:15:00