Python 名称错误:名称'_mysql';设置更改为mysql后未定义

Python 名称错误:名称'_mysql';设置更改为mysql后未定义,python,mysql,django,database,sqlite,Python,Mysql,Django,Database,Sqlite,我有一个正在运行的Django博客,在我的本地机器上运行SQLITE3DB。我想要的是 将sqlite3数据库转换为mysql数据库 更改Django settings.py文件以服务于MySQL数据库 在我跑上第一步之前,我跳上了第二步。我跟着(在MacOS上)。我在root用户上创建了名为djangolocaldb的数据库,并在/etc/mysql/my.cnf中包含这些信息,如下所示: # /etc/mysql/my.cnf [client] database=djangolocaldb

我有一个正在运行的Django博客,在我的本地机器上运行SQLITE3DB。我想要的是

  • 将sqlite3数据库转换为mysql数据库
  • 更改Django settings.py文件以服务于MySQL数据库
  • 在我跑上第一步之前,我跳上了第二步。我跟着(在MacOS上)。我在root用户上创建了名为
    djangolocaldb
    的数据库,并在
    /etc/mysql/my.cnf
    中包含这些信息,如下所示:

    # /etc/mysql/my.cnf
    
    [client]
    database=djangolocaldb
    user=root
    password=ROOTPASSWORD
    default-character-set=utf8
    
    当然,我创建了db,但不是其中的表

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | djangolocaldb      |
    | employees          |
    | information_schema |
    | mydatabase         |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    7 rows in set (0.00 sec)
    
    我按照网页的建议更改了
    settings.py
    。以下是方法:

    # 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',
                    }
                }
            }
    
    ...
    
    现在,当我运行
    python manage.py runserver
    并激活我的
    venv
    时,我得到了这样一个残酷的回溯(我首先运行了
    python manage.py migrate
    ,回溯看起来几乎是一样的):

    确保在python虚拟环境中安装了
    mysqlclient
    ,而不是
    mysqlclient
    。前者支持python3,而后者支持python2,我认为这可能不是您想要的

  • 确保在bash配置文件中放入以下行(
    ~/.zshrc
    用于zsh,或
    ~/.bashrc
    ~/.bash\u profile
    用于bash等)
  • 之后,通过运行
    source~/.您的shell\u config\u文件
    应用更改。请参见
    python manage.py migrate
    works.

    以获得完整答案:

    如果您使用python包,您仍然需要从Oracle/mysql安装mysql客户端。它包含python包使用的C库。让事情变得更加混乱:python包实际上是用C编写的,以提高速度。要在MacOS上安装此库,请执行以下操作:

    % brew install mysql-client
    

    还有一个更具吸引力的MIT许可证,如果您的公司或客户不允许GPL,它可能是一个解决方案。然而,它并没有得到官方的支持,在两个版本之间可能会出现一些微妙的错误。YMMV.

    所以,我在回答我自己的问题。因为我的博客有数据库,我给了它一个机会去做另一个没有数据库的项目,重新开始

    我注意到,使用此回溯导入
    MySQLdb
    模块(mysqlclient的子模块)时出现问题:
    库未加载:@rpath/libmysqlclient.21.dylib

    浏览了几个小时后,我意识到,由于某种原因,Mac的安全设置使其无法正确导入

    mysqlclient
    库github上,我发现报告与我的报告相同。它建议我运行
    cp-r/usr/local/mysql/lib/*/usr/local/lib/
    。在这之后,我为mysql设置了settings.py,运行了python manage.py migrate,它成功了。所以对于空数据库,这可能是一个解决方案。但仍在为数据库1而挣扎

    我用

    • MacOS Catalina 10.15.6
    • 皮恩夫

      • 这为我解决了这个问题:

        由于Python3无法通过mysqldb与Python连接,因此需要安装额外的模块来修复这些问题。安装mysqlclient导致我有相同的
        名称错误::名称“\u mysql”未定义
        问题

        但是,通过使用
        pymysql
        ,并添加代码行
        pymysql.install_as_MySQLdb()
        在我的
        Flask
        应用程序的顶部,我成功地让它运行,没有任何错误


        更多关于

        的信息我刚刚遇到了一个类似的问题,几个小时都找不到解决方案

        导入MySQLdb 回溯(最近一次呼叫最后一次): 文件“/{venv}/lib/python3.7/site packages/MySQLdb/_init___.py的路径”,第18行,在 从…起导入mysql ImportError://{path to venv}/lib/python3.7/site-packages/MySQLdb//u mysql.cpython-37m-arm-linux-gnueabihf.so:未能从共享对象映射段 在处理上述异常期间,发生了另一个异常: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/{venv}/lib/python3.7/site packages/MySQLdb/_init__;u.py的路径”,第24行,在 version\u info、\u mysql.version\u info、\u mysql.\u文件__ NameError:未定义名称“\u mysql” 因此,如果这里的任何人和我一样,在挂载的分区/磁盘上安装了virtualenv,那么您必须使用exec挂载它,这就是全部问题所在

        重新装入具有可执行权限的分区,如中所述:

        如果使用fstab安装驱动器,请参阅:


        (好吧,那是10个小时的尝试和调试——好吧,花lol)

        从MySQL服务器8.x.x恢复到5.7.x对我来说很有效

        Django支持MySQL 5.5.x-5.7.x。不支持MySQL 8及更高版本


        发现@

        我在MacOS(Big-Sur)上遇到了同样的问题,我这样做就解决了这个问题
        cp-r/usr/local/mysql/lib/*/usr/local/lib/
        这对我来说很有效:

        将此添加到路径:

        export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"
        

        这帮我完成了任务!只需安装libmysqlclient-dev(
        sudo-apt-get-install libmysqlclient-dev
        forubuntu)。有时,即使您刚刚安装了mysql,lib文件也会丢失。:)

        我同意梅尔文的观点

        您可以通过键入以下内容查看MySQL库链接:

        (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ python
        Python 3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020, 12:45:15) 
        [Clang 6.0 (clang-600.0.57)] on darwin
        Type "help", "copyright", "credits" or "license" for more information.
        >>> import MySQLdb as Database
        Traceback (most recent call last):
          File "/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/__init__.py", line 18, in <module>
            from . import _mysql
        ImportError: dlopen(/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
          Referenced from: /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so
          Reason: image not found
        
        During handling of the above exception, another exception occurred:
        
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/__init__.py", line 24, in <module>
            version_info, _mysql.version_info, _mysql.__file__
        NameError: name '_mysql' is not defined
        

        然后,我发现链接到的库MySQL不存在。

        确保您已经安装了自制MySQL客户端:
        brew安装MySQL客户端
        ,以便可以使用libmysqlclient(pyhton扩展使用的官方MySQL C库)。@Melvyn现在我已经运行了
        brew安装MySQL客户端
        ,我有不同的追踪废话废话…”和
        django.core.exceptions.impropertlyconfigured:settings.DATABASES配置不正确。请提供名称值看起来我取得了一些进展。我现在就调查这件事。谢谢他也有类似的问题。运行
        pythonc-c“import MySQLdb”
        是测试它是否有效的最简单方法。我的解决方案是将
        /usr/lib/x86_64-linux-gnu/lib{mariadb,mysqlclient}*
        中缺少的库文件复制到我的映像中。这对我有效,django 3,venv,mysql 8,mac 11.0这对我无效。能帮忙吗
        % brew install mysql-client
        
        export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"
        
        (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ python
        Python 3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020, 12:45:15) 
        [Clang 6.0 (clang-600.0.57)] on darwin
        Type "help", "copyright", "credits" or "license" for more information.
        >>> import MySQLdb as Database
        Traceback (most recent call last):
          File "/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/__init__.py", line 18, in <module>
            from . import _mysql
        ImportError: dlopen(/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
          Referenced from: /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so
          Reason: image not found
        
        During handling of the above exception, another exception occurred:
        
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/__init__.py", line 24, in <module>
            version_info, _mysql.version_info, _mysql.__file__
        NameError: name '_mysql' is not defined
        
        (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ otool -L /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so
        /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so:
            /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)
            /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
        (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ ls -l /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
        ls: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib: No such file or directory