har*_*gim 19 python mysql database sqlite django
I have a running Django blog with sqlite3 db at my local machine. What I want is to
Before I ran into the first step, I jumped into the second first. I followed this web page (on MacOS). I created databases called djangolocaldb on root user and have those infos in /etc/mysql/my.cnf like this:
# /etc/mysql/my.cnf
[client]
database=djangolocaldb
user=root
password=ROOTPASSWORD
default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)
Of course I created db, but not table within it.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| djangolocaldb |
| employees |
| information_schema |
| mydatabase |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
I changed settings.py like this as the web page suggested. Here's how:
# settings.py
...
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'OPTIONS' : {
'read_default_file': '/etc/mysql/my.cnf',
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
Now, when I ran python manage.py runserver with my venv activated, I got a brutal traceback like this(I ran python manage.py migrate first, and the traceback looked almost the same anyway):
(.venv) ? django-local-blog git:(master) ? python manage.py runserver
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
from . import _mysql
ImportError: dlopen(/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libmysqlclient.21.dylib
Referenced from: /Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so
Reason: image not found
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception
raise _exception[1]
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 357, in execute
autoreload.check_errors(django.setup)()
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
self.models_module = import_module(models_module_name)
File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/contrib/auth/models.py", line 2, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 47, in <module>
class AbstractBaseUser(models.Model):
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/models/base.py", line 121, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/models/base.py", line 325, in add_to_class
value.contribute_to_class(cls, name)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/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 "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/__init__.py", line 28, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/utils.py", line 207, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/utils.py", line 111, in load_backend
return import_module('%s.base' % backend_name)
File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
import MySQLdb as Database
File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/__init__.py", line 24, in <module>
version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
Run Code Online (Sandbox Code Playgroud)
So this NameError: name '_mysql' is not defined is the problem. I installed mysqlclient before, changed settings.py, made db in mysql, but none of the steps made it any helpful yet.
And I noticed that even I changed my settings.py back to sqlite3, my blog spit the same _mysql not defined error. So I ended up reverting my commit and now I'm back to sqlite3 (at least my blog is running with it).
I'm guessing it could be that I didn't convert data first, but I'm not 100% sure of it.
Any suggestion would be much appreciated. Thank you in advance!
If you still see _mysql not defined error when you run python manage.py migrate somehow, check out the following two settings.
mysqlclient when you run pip freeze in your python virtual environment like so,(.venv) ? SqlDjango git:(master) ? pip freeze
...
Django==3.0.8
mysqlclient==2.0.1
...
Run Code Online (Sandbox Code Playgroud)
make sure you installed mysqlclient in your python virtual environment, not mysql-client. The former supports python3, whereas the latter supports python2, which I assume is not probably what you want.
~/.zshrc for zsh, or ~/.bashrc or ~/.bash_profile for bash etc.)export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
Run Code Online (Sandbox Code Playgroud)
After that, apply change by runnig source ~/.your_shell_config_file. See python manage.py migrate works.
Yub*_*apa 18
确保你已经安装了mysql客户端。要安装它,请编写以下命令。
pip install mysqlclient
Run Code Online (Sandbox Code Playgroud)
转到项目的settings.py文件,然后导入
import pymysql
pymysql.install_as_MySQLdb()
Run Code Online (Sandbox Code Playgroud)
运行服务器如果没有获得名为 pymysql 的模块,则在终端运行
pip install pymysql
Run Code Online (Sandbox Code Playgroud)
har*_*gim 12
所以,我正在回答我自己的问题。由于我的博客有数据库,我尝试制作另一个没有数据库的项目,重新开始。
后来我发现是有问题导入MySQLdb模块(的mysql的子模块)这个追踪:Library not loaded: @rpath/libmysqlclient.21.dylib。
浏览几个小时后,我意识到由于某种原因,Mac 安全设置阻止了正确导入。
在mysqlclient库 github 上,我发现了一个与我的报告相同的问题。它建议我运行cp -r /usr/local/mysql/lib/* /usr/local/lib/. 在此之后,我设置settings.py为django.db.backends.mysql,运行python manage.py migrate并且它起作用了。所以对于空数据库,这可能是一个解决方案。仍然在数据库一上苦苦挣扎。
我用
Mel*_*vyn 10
所以作为一个完整的答案:
如果您使用 python 包mysqlclient,您仍然需要从 Oracle/MySQL 安装 mysql 客户端。这包含 python 包使用的 C 库。更令人困惑的是:python 包实际上是用 C 编写的,以提高速度。在 MacOS 上安装这个库:
% brew install mysql-client
Run Code Online (Sandbox Code Playgroud)
还有一个纯 python 包,带有更有吸引力的 MIT 许可证,如果您的公司或客户不允许 GPL,它可以是一个解决方案。但是,它不受官方支持,并且在发布之间可能会出现一些细微的错误。天啊。
小智 9
这对我有用:
将此添加到路径:
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"
Run Code Online (Sandbox Code Playgroud)
在 MacBook Pro M1 macOS Monterey 上,运行此命令不起作用:
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"
但这对我有用:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib
Run Code Online (Sandbox Code Playgroud)
小智 6
这为我解决了这个问题:
由于Python3无法通过mysqldb与Python连接,因此您需要安装额外的模块来修复问题。安装 mysqlclient 导致我遇到同样的NameError: : name '_mysql' is not defined问题。
然而,通过使用,并在我的应用程序顶部pymysql添加代码行
,我设法让它运行而没有任何错误!pymysql.install_as_MySQLdb()Flask
有关mysql 模块的更多信息
这为我完成了工作!只需安装 libmysqlclient-dev(sudo apt-get install libmysqlclient-dev适用于 Ubuntu)。有时,即使您刚刚安装了 mysql,lib 文件也会丢失。:)
| 归档时间: |
|
| 查看次数: |
23955 次 |
| 最近记录: |