**
**
我在使用 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
(也尝试使用 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
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/