mac安装mysql参考(2023)mac安装mysql_Vermouth_00的博客-CSDN博客
最近在看数据库,尝试使用python操作mysql,首先需要电脑上安装mysql,然后python安装pymysql库,使用pycharm连接mysql,创建数据库和表并插入数据,最后就可以使用python对数据库进行增删改查操作了。
一、安装驱动
python常见的mysql库有:
MySQLdb(mysqlclient),mysql-connector-python,pymysql
MySQLdb和mysqlclient 的区别:
MySQLdb只支持python 2.x 版本,mysqlclient 是MySQLdb的一个分支,解决了python 3.x 的兼容问题。
mysqlclient
1)是一个C扩展模块,编译安装可能会导致报各种错误,明显没有pymysql方便;
2)速度快;
pymysql
1)纯Python实现的,安装简单(直接pip安装);
2) 由于纯Python实现的,可以很好的跟gevent框架结合;
mysql-connector-python也是纯python的,是msql官方的驱动。pymysql的效率和可移植性和mysql-connector-python理论上是差不多的。
综上,选择pymysql。
安装pymysql
终端运行pip3 install pymysql3
如果提示:Operation not permitted的话就在命令前面加上sudo表示管理员权限运行这条指令。
在pycharm中import pymysql没有报错,说明安装成功。
二、pycharm连接mysql
打开pycharm右侧database,点击+号添加数据库,选择mysql;
弹出的对话框中,需要填写的几项:user,password,database,如果下方提示驱动未安装,需要下载驱动,最后就可以测试是否连接成功。
a. User: Mysql的username
b. Password: Mysql的password
c. Database: 数据库名
d. 自动下载缺失的驱动
e. Test connection:测试连接是否成功
需要注意,用户名是数据库的用户,用户名和密码一定要是正确的,用户需要有远程访问权限,后台mysql服务需要正常启动,3306端口未被占用,mysql driver版本与电脑安装的mysql版本要匹配,满足这些条件,test connection才能成功。
如果这里test connection报错,可以参考这篇文章排查问题:Pycharm连接mysql遇到的坑,报错Access denied for user ‘root‘_Vermouth_00的博客-CSDN博客
test connection成功后,点击apply,再点击ok。
三、创建数据库和表
1.创建数据库
create database StudentSystem;
show databases;
2.创建表
use StudentSystem;
CREATE TABLE test_student (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
description varchar(20) DEFAULT NULL,
sex varchar(2) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
这里遇到报错ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc varchar(20) DEFAULT NULL,sex varchar(2) DEFAULT NULL,PRIMARY KEY (id)' at line 4
报错是因为desc是关键字,换成description就好了;
再次执行,通过了,但是有warnings
show warnings;
查看warnings
MySQL从8.0.17开始就不建议对int指定显示宽度,也将在未来的版本中删除这一个规则。
当前是字符集utf8mb3的别名,但在将来的版本中将是utf8mb4的别名。请考虑使用utf8mb4,以便不含糊。
MySQL 中的 utf8 就是 utf8mb3,最大兼容三字节的 unicode 字符,MySQL 在 5.5.3 版本之后增加了 utf8mb4 的编码,mb4 就是 most bytes 4 的意思,专门用来兼容四字节的 unicode 字符。
show tables;
3.插入数据
INSERT INTO 表名(字段1,字段2, ...) VALUES (值1,值2,...);
insert into test_student values( 1120233310 , '小何' , '软件工程' , '女' );
insert into test_student values( 1120232394 , '小张' , '计算机科学与技术' , '男' );
insert into test_student values( 1120232764 , '姚姚' , '物联网' , '女' );
四、python操作数据库
execute只接受一个sql字符串做参数
-
execute如果是增删改操作,返回受影响行数
-
execute是查操作,返回查到的数据总数
cursor是一种在数据库中遍历数据的机制,它允许我们在数据库中执行查询并遍历结果集。
(1)查询操作
import pymysql
#连接数据库
conn = pymysql.connect(
host='localhost',
user='test',
password='hejiahuan04',
database='StudentSystem'
)
#创建游标对象:cursor
cursor = conn.cursor()
#查询语句
sql = 'select * from test_student'
#执行
cursor.execute(sql)
# 获得全部结果
result = cursor.fetchall()
print(result)
# #另一种方式
# result = cursor.execute(sql)
# for i in range(result):
# print(cursor.fetchone())
#result可以返回我们操作的行数。fetchone()可以返回记录,一条一条输出。
# 关闭连接
cursor.close()
conn.close()
data = cursor.fetchall() # data是一个可迭代对象,可以用遍历的方式获取到里面的值,data是元组,元组的元素也是一个一个的子元组。
(2)插入操作
除了查询操作不需要写conn.commit() ,其他操作都需要写,不然无法完成。
def insert_sql():
#插入
sql_insert = "insert into test_student values (1120231126,'飞飞','土木工程','女')"
cursor.execute(sql_insert)
conn.commit()
(3)删除操作
def delete_sql():
#删除
sql_delete = "delete from test_student where name='飞飞'"
cursor.execute(sql_delete)
conn.commit()
(4)更新操作
def update_sql():
#更新,把飞飞的性别改成男
sql_update = "update test_student set sex='男' where name='飞飞'"
cursor.execute(sql_update)
conn.commit()
(5)批量插入
executemany可用来完成批量插入。
def insert_many():
#批量插入
# SQL 插入语句
sql_insert_many = "insert into test_student(id,name,description,sex) values (%s,%s,%s,%s)"
# 一个tuple或者list
T = ((1120230039, '小李', '国贸', '男'),(1120230520, '小王', '数据分析', '女'),(1120231202, '小陈', '法律', '女'))
try:
cursor.executemany(sql_insert_many,T)
conn.commit()
except:
# 如果发生错误则回滚
conn.rollback()