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

技术求助:如何通过数据库IP地址在Django中从Sage Evolution数据库获取账户数据并生成账户对账单与账龄分析

解决Django连接远程Sage Evolution MSSQL数据库的问题

我之前帮别人处理过类似的Django对接远程MSSQL数据库的需求,结合你提供的pymssql代码,给你梳理一下在Django框架里实现相同取数流程的具体步骤:

1. 先安装MSSQL适配的Django数据库后端

Django原生对MSSQL的支持需要依赖第三方库,推荐使用微软官方维护的mssql-django,安装命令:

pip install mssql-django

2. 配置Django的数据库连接(指定IP地址)

在你的Django项目的settings.py里修改DATABASES配置,把远程数据库的IP、账号信息填进去:

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': 'DB_Name',  # 你的数据库名称
        'USER': '[Username]_dev_ro',  # 只读账号
        'PASSWORD': '[Password]',
        'HOST': '[IP]',  # 远程数据库的IP地址
        'PORT': '1433',  # MSSQL默认端口,如果你的端口不一样请修改
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',  # 需要提前安装ODBC驱动
        },
    }
}

注意:要确保你的服务器上已经安装了「ODBC Driver 17 for SQL Server」,不然会连接失败。

3. 用inspectdb生成数据库模型(对应现有表)

配置好连接后,你就可以用inspectdb命令自动生成对应Sage Evolution数据库表的Django模型了:

# 先查看生成的模型代码
python manage.py inspectdb

# 如果确认没问题,直接写入到你的app的models.py里
python manage.py inspectdb > your_app_name/models.py

生成模型后,记得在模型类里加上managed = False,这样Django不会尝试修改或创建这些现有表:

class _etblGLAccountTypes(models.Model):
    # 自动生成的字段...
    class Meta:
        managed = False
        db_table = '_etblGLAccountTypes'

4. 实现类似pymssql的原生SQL取数流程

如果你不想用Django的ORM,想直接执行原生SQL(就像你用pymssql写的那样),可以用Django提供的connection对象来实现:

from django.db import connection

def get_account_types():
    # 用with语句自动管理连接和游标
    with connection.cursor() as cursor:
        # 执行你的查询语句
        cursor.execute('SELECT top 10 * FROM [DB_Name].[dbo].[_etblGLAccountTypes]')
        # 把结果转成字典格式(和你pymssql的as_dict=True效果一样)
        columns = [col[0] for col in cursor.description]
        results = [dict(zip(columns, row)) for row in cursor.fetchall()]
        
        # 遍历结果(和你原来的代码逻辑一致)
        for row in results:
            print(row)
    return results

这个方法不需要手动关闭连接,with语句会自动处理,比直接用pymssql更贴合Django的生态。

一些额外的注意事项

  • 确保远程数据库的防火墙已经开放了1433端口(或者你指定的端口),允许你的Django服务器IP访问
  • 确认使用的数据库账号有足够的只读权限(因为你用的是_dev_ro账号,刚好符合需求)
  • Sage Evolution的数据库表结构可能比较复杂,涉及多个表的关联查询,后续做账单和账龄分析时,可以结合Django ORM的关联查询来简化代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:42:50