python - SyntaxError : invalid syntax on lib/python3. 8/site-packages/sql_server/pyodbc/base.py django 在 Linux 上部署

标签 python sql-server django ubuntu pyodbc

**

  • 前言(在本地 Windows PC 上使用操作系统测试 HyperV 虚拟服务器:Ubuntu Server 20.04.1)

  • **
    我在使用 MS SQL Server 作为其数据库的 Ubuntu Server 20.04.1 LTS 上部署我的 Django 应用程序(使用 Python 3.8.2)时遇到问题。在 Linux 上恢复到 'ENGINE': 'django.db.backends.sqlite3' 没有问题,但老实说,这令人沮丧。
    我已经不得不降级到 Django==3.0 才能让我的应用程序在我的本地 Windows pc 上运行,但是我所做的 2 次迁移证明我错过了一些东西,我希望有人能帮帮我。任何帮助表示赞赏。
  • 我的电脑

  • 工作 settings.py 文件(当前在带有 Sql Server 2019 Express 的 Windows 上运行
        DATABASES = {
        'default': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'mdm_db',
            'USER': 'AAA',
            'PASSWORD': 'AAA',
             'HOST': 'localhost\\SQLEXPRESS',
            'PORT': '',
    
            'OPTIONS': {
                'driver': 'SQL Server Native Client 11.0',
                # 'driver': 'ODBC Driver 13 for SQL Server ', -> port 1433?
            },
        },
        }
    installed components:
        pip freeze
        asgiref==3.2.10
        Django==3.0
        django-mssql-backend==2.8.1
        pyodbc==4.0.30
        pytz==2020.1
        sql-server.pyodbc==1.0
        sqlparse==0.3.1
    
  • Ubuntu 服务器

  • (也尝试使用 ODBC 并安装最新版本 https://docs.microsoft.com/it-it/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15 )
    DATABASES = {
        'default': {
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'mdm_db',
            'USER': 'mdmuser',
            'PASSWORD': 'mdmuser',
             'HOST': 'localhost\\SQLEXPRESS',
            'PORT': '',
            'OPTIONS': {
                #'driver': 'SQL Server Native Client 11.0',
                 'driver': 'ODBC Driver 17 for SQL Server ',
            },
        },
        }
    
    安装的软件包
    :~/app/MDM_SQLServer$ history | grep install
    
       32  sudo apt-get install unixodbc-dev
       34  sudo apt-get install python3-dev
       36  sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
       60  sudo ACCEPT_EULA=Y apt-get install msodbcsql17
    
  • 问题:(venv) luca@webserver:~/app/MDM_SQLServer$ python manage.py runserver
  • Watching for file changes with StatReloader
    Exception in thread django-main-thread:
    Traceback (most recent call last):
      File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.8/threading.py", line 870, in run
        self._target(*self._args, **self._kwargs)
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
        fn(*args, **kwargs)
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
        autoreload.raise_last_exception()
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
        raise _exception[1]
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 357, in execute
        autoreload.check_errors(django.setup)()
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
        fn(*args, **kwargs)
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/__init__.py", line 24, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/apps/registry.py", line 114, in populate
        app_config.import_models()
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/apps/config.py", line 211, in import_models
        self.models_module = import_module(models_module_name)
      File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
      File "<frozen importlib._bootstrap>", line 991, in _find_and_load
      File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 783, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "/home/luca/app/MDM_SQLServer/cpus/models.py", line 6, in <module>
        from sites.models import Site
      File "/home/luca/app/MDM_SQLServer/sites/models.py", line 4, in <module>
        from wifis.models import Wifi
      File "/home/luca/app/MDM_SQLServer/wifis/models.py", line 3, in <module>
        class Wifi(models.Model):
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/db/models/base.py", line 121, in __new__
        new_class.add_to_class('_meta', Options(meta, app_label))
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/db/models/base.py", line 325, in add_to_class
        value.contribute_to_class(cls, name)
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/db/models/options.py", line 208, in contribute_to_class
        self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/db/__init__.py", line 28, in __getattr__
        return getattr(connections[DEFAULT_DB_ALIAS], item)
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/db/utils.py", line 207, in __getitem__
        backend = load_backend(db['ENGINE'])
      File "/home/luca/app/venv/lib/python3.8/site-packages/django/db/utils.py", line 111, in load_backend
        return import_module('%s.base' % backend_name)
      File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "/home/luca/app/venv/lib/python3.8/site-packages/sql_server/pyodbc/base.py", line 7
        except ImportError, e:
                          ^
    SyntaxError: invalid syntax
    
    NOTE 提示不返回,我需要corntol+C out。
    Test2 新环境
    luca@webserver:~/app/MDM_SQLServer$ source test2/bin/activate
    (test2) luca@webserver:~/app/MDM_SQLServer$ pipinstall -r req
    req.txt           requirements.txt
    (test2) luca@webserver:~/app/MDM_SQLServer$ pipinstall -r req.txt
    pipinstall: command not found
    (test2) luca@webserver:~/app/MDM_SQLServer$ pip install -r req.txt
    Collecting asgiref==3.2.10
      Using cached asgiref-3.2.10-py3-none-any.whl (19 kB)
    Collecting Django==3.0
      Using cached Django-3.0-py3-none-any.whl (7.4 MB)
    Collecting django-mssql-backend==2.8.1
      Using cached django_mssql_backend-2.8.1-py3-none-any.whl (52 kB)
    Collecting pyodbc==4.0.30
      Using cached pyodbc-4.0.30.tar.gz (266 kB)
    Collecting pytz==2020.1
      Using cached pytz-2020.1-py2.py3-none-any.whl (510 kB)
    Processing /home/luca/.cache/pip/wheels/a9/78/cf/dc91ed794c352243f2796a29991293fd578c91f6584b0682f7/sql_server.pyodbc-1.0-py3-none-any.whl
    Collecting sqlparse==0.3.1
      Using cached sqlparse-0.3.1-py2.py3-none-any.whl (40 kB)
    Building wheels for collected packages: pyodbc
      Building wheel for pyodbc (setup.py) ... error
      ERROR: Command errored out with exit status 1:
       command: /home/luca/app/MDM_SQLServer/test2/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-tth7v6fw/pyodbc/setup.py'"'"'; __file__='"'"'/tmp/pip-install-tth7v6fw/pyodbc/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-lr00jtg6
           cwd: /tmp/pip-install-tth7v6fw/pyodbc/
      Complete output (6 lines):
      usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
         or: setup.py --help [cmd1 cmd2 ...]
         or: setup.py --help-commands
         or: setup.py cmd --help
    
      error: invalid command 'bdist_wheel'
      ----------------------------------------
      ERROR: Failed building wheel for pyodbc
      Running setup.py clean for pyodbc
    Failed to build pyodbc
    Installing collected packages: asgiref, pytz, sqlparse, Django, pyodbc, django-mssql-backend, sql-server.pyodbc
        Running setup.py install for pyodbc ... done
    Successfully installed Django-3.0 asgiref-3.2.10 django-mssql-backend-2.8.1 pyodbc-4.0.30 pytz-2020.1 sql-server.pyodbc-1.0 sqlparse-0.3.1
    (test2) luca@webserver:~/app/MDM_SQLServer$
    
    提前致谢

    最佳答案

    except ImportError, e错误消息中显示的语法is deprecated . pyodbc 仅声称支持 Python 2.7、3.4、3.5 和 3.6。
    鉴于除 Python 3.6 之外的所有这些版本都已停产,我怀疑 pyodbc不再维护太多。理想情况下,找到一个更好的库。如果您必须使用这个,请尝试使用 Python 3.6。

    关于python - SyntaxError : invalid syntax on lib/python3. 8/site-packages/sql_server/pyodbc/base.py django 在 Linux 上部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63969828/

    相关文章:

    python - 子进程登录到远程主机而不是在 python 中出现

    sql-server - 捕获 block 不处理错误

    python - 如何将 POST 数据发送到反向 URL

    python坐标变换/插值可能吗?

    sql-server - 来自 Powershell 的 Powershell DBCC CheckDB

    sql - 检测有序列表中变化的函数

    django - 重写 Django 模型中的 clean 方法会破坏其他验证吗?

    django - Apache 或 lighttpd

    python - 在 Django 网站中嵌入 Bokeh 图导致空白页面没有错误消息

    python - Pyresttest 运行目录中的所有测试