连接数据库前, 请先确认以下事项
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')
>>>
网友评论