将Django连接到MSSQL Server 2012时出错

时间:2018-10-22 08:30:27

标签: sql-server django python-3.x

在为我当前的django项目进行迁移时遇到错误。

下面的

是写入settings.py文件中的代码以连接到MSSQL Server。

DATABASES = {
'default': {
    'ENGINE':'sql_server.pyodbc',
    'NAME':'JTPROD',
    'HOST':'TZACL5X8H1N2\SQLEXPRESS', ##this is my local machine database
    'USER':'xxx', ##ommitted for the post 
    'PASSWORD':'xxx',##ommitted for tht post
    'PORT':'',

    'OPTIONS':{
        'provider': 'SQLOLEDB', # Have also tried 'SQLCLI11' and 'SQLCLI10'
        'extra_params': 'DataTypeCompatibility=80',
        'driver':'SQL Server',
             },
    },
}

但是当我运行“ python manage.py migration

时出现以下错误
  

回溯(最近通话最近):文件   “ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”,   确保连接中的第216行       self.connect()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”,   线194,在连接中       self.connection = self.get_new_connection(conn_params)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ sql_server \ pyodbc \ base.py”,   第307行,在get_new_connection中       timeout = timeout)pyodbc.OperationalError:('08001','[08001] [Microsoft] [ODBC SQL Server驱动程序]既不是DSN也不是SERVER关键字   提供(0)(SQLDriverConnect); [08001] [Microsoft] [ODBC SQL Server   驱动程序]无效的连接字符串属性(0)')

上述异常是以下异常的直接原因:

  

回溯(最近一次通话最后一次):文件“ manage.py”,第15行,在          execute_from_command_line(sys.argv)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ management__init __。py”,   第381行,在execute_from_command_line中       utility.execute()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ management__init __。py”,   行375,在执行       self.fetch_command(subcommand).run_from_argv(self.argv)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ management \ base.py” ,   第316行,位于run_from_argv中       self.execute(* args,** cmd_options)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ management \ base.py”,   第353行,在执行中       输出= self.handle(* args,**选项)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ management \ base.py” ,   第83行,缠绕       res = handle_func(* args,** kwargs)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ core \ management \ commands \ migrate.py” ,   82行,在手柄中       执行程序= MigrationExecutor(连接,self.migration_progress_callback)文件   “ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ migrations \ executor.py”,   第18行,初始化       self.loader = MigrationLoader(自我连接)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ migrations \ loader.py”,   第49行,初始化       self.build_graph()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ migrations \ loader.py”,   第212行,在build_graph中       self.applied_migrations = records.applied_migrations()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ migrations \ recorder.py”,   第61行,位于Applied_migrations中       如果self.has_table():文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ migrations \ recorder.py”,   has_table中的第44行       在self.connection.introspection.table_names(self.connection.cursor())中返回self.Migration._meta.db_table
  文件   “ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”,   游标中的第255行       返回self._cursor()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”,   _cursor中的第232行       self.ensure_connection()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”,   确保连接中的第216行       self.connect()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ utils.py”,   第89行,退出       从exc_value文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”中提高dj_exc_value.with_traceback(traceback),   确保连接中的第216行       self.connect()文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ django \ db \ backends \ base \ base.py”,   线194,在连接中       self.connection = self.get_new_connection(conn_params)文件“ C:\ Users \ elukamis \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ sql_server \ pyodbc \ base.py”,   第307行,在get_new_connection中       超时=超时)django.db.utils.OperationalError:('08001','[08001] [Microsoft] [ODBC SQL Server驱动程序] DSN或SERVER   提供的关键字(0)(SQLDriverConnect); [08001] [Microsoft] [ODBC SQL   服务器驱动程序]无效的连接字符串属性(0)')

有人对我的配置中可能缺少的东西有任何想法吗?

1 个答案:

答案 0 :(得分:0)

如果您仍在寻找答案,我不确定这是否会对您有所帮助,但是当我遇到类似错误时,它对我有帮助。默认情况下,SQL Server Express的TCP / IP连接处于禁用状态,但是显然需要启用它们才能允许这样的连接。

打开SQL Server配置管理器,展开“ SQL Server网络配置”,然后单击“ SQLEXPRESS协议”。假设TCP / IP的条目显示为“已禁用”,右键单击该条目,然后选择“属性”。在“协议”标签上,将“启用”设置为“是”。我还通过在“ IPAll”部分(位于底部)的“ TCP端口”字段中输入“ 1433”来更新“ IP地址”选项卡。然后,我在settings.py DATABASES配置部分中指定了'PORT':'1433',。我不确定这是否必要,但是按照这些步骤进行操作可使我的应用程序成功连接到SQL Server Express。