美文网首页
Mac python3 连接到数据库

Mac python3 连接到数据库

作者: 蓝白自由 | 来源:发表于2023-02-09 21:05 被阅读0次
    • 2023.02.10
    连接数据库前, 请先确认以下事项
    1、Mac 已经安装了【 MySQL 服务器 】, 如果还未安装, : 可以访问我们的 MySQL 基础教程
    2、已经创建了 数据库 test , 默认情况下已经创建, 只要你没删掉
    3、连接数据库 test 使用的用户名为 "root" , 密码为 "", 这也是安装时默认就存在的
    4、在你的机子上已经安装了 Python PyMySQL 模块
    5、如果你对 SQL 语句不熟悉, : 可以访问我们的 SQL 基础教程
    
    ==========================================================================================
    
    下面的代码可以连接到本地 (localhost) 服务器 上的 test 数据库
    
    >>> import pymysql
    >>> db = pymysql.connect("localhost", "root", "", "test") # 打开数据库连接
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: Connection.__init__() takes 1 positional argument but 5 were given
    一般出现这个问题都是 参数传递错误、这个异常意思是:只有一个参数位置却给出了5个
    pymysql 在 1.0 以后的版本、上面写法就会报错
    
    首先查看该方法的参数:pymysql.Connect()参数说明
    host(str):      MySQL服务器地址
    port(int):      MySQL服务器端口号
    user(str):      用户名
    passwd(str):    密码
    db(str):        数据库名称
    charset(str):   连接编码
    
    connection 对象支持的方法
    cursor()        使用该连接创建并返回游标
    commit()        提交当前事务
    rollback()      回滚当前事务
    close()         关闭连接
    
    cursor 对象支持的方法
    execute(op)     执行一个数据库的查询命令
    fetchone()      取得结果集的下一行
    fetchmany(size) 获取结果集的下几行
    fetchall()      获取结果集中的所有行
    rowcount()      返回数据条数或影响行数
    close()         关闭游标对
    
    需要修改为:
    >>> db = pymysql.connect(host="localhost", user="root", password="你的新密码", database="testdb")
    
    错误1:
    pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 61] Connection refused)")
    pymysql.err 操作错误:2003 无法连接到"本地主机" 上的 MySQL 服务器([WinError 10061]由于计算机积极拒绝、无法连接)
    解决办法: 安装 MySQL
    
    错误2:
    RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
    RuntimeError: sha256_password 或 caching_sha2_password 身份验证方法需要 "cryptography" 包
    该错误提示的意思是: sha256_password 和 caching_sha2_password 两种加密方式需要 cryptography。
    所以只需要安装一下 cryptography 包就可以了: pip install cryptography
    或者豆瓣源:pip3 install cryptography -i https://pypi.douban.com/simple
    (推荐)清华大学源:pip3 install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    错误3:
    pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
    pymysql.err.OperationalError:(1045, "用户'root'@'localhost'的访问被拒绝(使用密码:是)")
    首先停止 Mysql 服务、打开 系统偏好设置 中的 mysql 选择 Stop Mysql Server 去停止 MySQL 服务 (停止不了就重启电脑)
    输入:cd /usr/local/mysql/bin/   回车
    再输入:sudo su 回车后 输入管理员密码去登录管理员权限
    接着再输入: ./mysqld_safe --skip-grant-tables 回车后 mysql 会自动重启(偏好设置中mysql的状态会变成running)
    新创建窗口 输入:cd /usr/local/mysql/bin/   回车
    输入命令 ./mysql
    回车后,输入刷新 命令 FLUSH PRIVILEGES; 或 flush privileges
    回车后,输入命令 ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
    
    UPDATE mysql.user SET authentication_string=PASSWORD('12345678') WHERE User='root';
    或
    UPDATE mysql.user SET Password =PASSWORD('admin123') WHERE User='root';
    
    
    错误4:
    db = pymysql.connect(host="localhost", user="root", password="你的新密码", database="testdb")
    UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-4: ordinal not in range(256)
    UnicodeEncodeError:'latin-1' 编解码器无法对位置 0-4 中的字符进行编码:序号不在范围内 (256)
    在使用 pymysql 时, 没有定义编码格式, 在数据库中 insert 插入汉字时也可能出现以上报错
    解决方法如下:在连接中 指定 charset='utf8'
    import pymysql
    db = pymysql.connect(host='localhost', user='root', password='你的新密码'.encode('utf-8'), database='testdb')
    
    
    错误5:
    pymysql.err.OperationalError: (1049, "Unknown database 'testdb'")
    你应该创建这个表才能执行操作
    错误示例:
    % mysql -u root -p你的新密码
    mysql> create database testdb
        ->
        ->
    正确示例: MySQL 语法 养成良好的带分号(;) 的习惯
    % mysql -u root -p你的新密码
    mysql> create database testdb;
    Query OK, 1 row affected (0.01 sec)
    
    
    最终执行 OK:
    Pro ~ % python3
    Python 3.11.1 (v3.11.1:a7a450f84a, Dec  6 2022, 15:24:06) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pymysql
    >>> db = pymysql.connect(host='localhost', user='root', password='你的新密码'.encode('utf-8'), database='testdb')
    >>>
    

    相关文章

      网友评论

          本文标题:Mac python3 连接到数据库

          本文链接:https://www.haomeiwen.com/subject/jiyhkdtx.html