当前位置:   article > 正文

Python 连接 mysql 详解(mysql-connector-python)

mysql-connector-python

1 概述

1.1 第三方库:mysql-connector-python

pip install mysql-connector-python
  • 1

1.2 可视化工具:navicat

在这里插入图片描述

1.3 创建测试数据库

在这里插入图片描述

-- 创建数据库
create database python_demo DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

-- 创建测试表
create table python_demo.student(
  sno      int unsigned auto_increment comment '学号',
	sname    varchar(30) not null comment '姓名',
	age      int comment '年龄',
	birthday date comment '出生日期',
  primary key(sno)
) engine=innodb default charset=utf8 comment '学生信息表';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2 连接 mysql 数据库

2.1 创建一个连接

import mysql.connector

# 配置连接信息
conn = mysql.connector.connect(
    host='127.0.0.1',
    port='3306',
    user='root',
    password='12345',
    database='python_demo'
)
# 当前 mysql 版本号
print(conn.get_server_version())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.2 捕获连接异常

import mysql.connector
from mysql.connector import errorcode

try:
    # 配置连接信息
    conn = mysql.connector.connect(
        host='127.0.0.1',
        port='3306',
        user='root',
        password='12345',
        database='python_demo'
    )
    # 当前 mysql 版本号
    print(conn.get_server_version())

    # 捕获异常
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print('账号或密码错误!')
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print('数据库不存在!')
    else:
        print(err)
else:
    # 关闭连接
    conn.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2.3 从配置文件中获取连接信息

目录结构:
在这里插入图片描述

config.ini:

[mysql]
host = 127.0.0.1
port = 3306
user = root
password = 12345
database = python_demo
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

m1.py:

import mysql.connector
from mysql.connector import errorcode
import configparser

# 创建配置解析器对象
config = configparser.ConfigParser()
# 读取配置文件
config.read('config.ini')

try:
    # 配置连接信息
    conn = mysql.connector.connect(
        host=config.get('mysql', 'host'),
        port=config.get('mysql', 'port'),
        user=config.get('mysql', 'user'),
        password=config.get('mysql', 'password'),
        database=config.get('mysql', 'database')
    )
    # 当前 mysql 版本号
    print(conn.get_server_version())

    # 捕获异常
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print('账号或密码错误!')
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print('数据库不存在!')
    else:
        print(err)
else:
    # 关闭连接
    conn.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

3 执行 sql 语句

3.1 插入、更新、删除

  • execute():用来执行 sql 语句,如:增删改查,存储过程等
  • commit():用来提交事务
import mysql.connector

# 配置连接信息
conn = mysql.connector.connect(
    host='127.0.0.1',
    port='3306',
    user='root',
    password='12345',
    database='python_demo'
)

# 创建游标对象
cursor = conn.cursor()

# 操作数据:插入、修改、删除 同理,注:数据类型均可用 %s
# 操作一条数据
sql = 'insert into student(sname, age, birthday) values(%s, %s, %s);'
param = ('张三', '18', '1994-12-08')
cursor.execute(sql, param)

# 操作多条数据
sql = 'insert into student(sname, age, birthday) values(%s, %s, %s);'
param = [('李四', '20', '1992-10-05'),
         ('王五', '16', '1996-05-26'),
         ('赵六', '08', '1994-05-26')]
cursor.executemany(sql, param)

# 提交数据
conn.commit()

# 关闭游标和数据库连接
cursor.close()
conn.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

3.2 查询

import mysql.connector

# 配置连接信息
conn = mysql.connector.connect(
    host='127.0.0.1',
    port='3306',
    user='root',
    password='12345',
    database='python_demo'
)

# 创建游标对象
cursor = conn.cursor()

# 查询数据
sql = 'select sno, sname, age, birthday from student where sno >= %s'
param = (1,)

cursor.execute(sql, param)
result = cursor.fetchall()

# 打印结果
for row in result:
    print(row)

# 关闭游标和数据库连接
cursor.close()
conn.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/613388
推荐阅读
相关标签
  

闽ICP备14008679号