mac用python操作mysql

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

扫描二维码关注公众号,回复: 15798911 查看本文章

        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()

猜你喜欢

转载自blog.csdn.net/Vermouth_00/article/details/131008234