Pycharm访问MySQL数据库·下

1.数据库连接池

1.1 什么是连接池

连接池(Connection Pool)是一种用于管理数据库连接的技术。它通过预先创建一组数据库连接,并在需要时将这些连接提供给应用程序,从而避免了频繁地打开和关闭数据库连接的开销。

连接池在代码中的作用:

资源复用:连接池预先创建了一定数量的数据库连接,并存储在池中。当应用程序需要与数据库交互时,它可以从连接池中获取一个已经建立的连接,而不是每次都创建新的连接。这样可以显著减少创建和销毁连接的开销。

1.2 连接池案例

# 构建连接池工具
import mysql.connector.pooling
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
try:
    #创建连接池 pool_size=10:连接池的连接数量
    pool = mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)
    #从连接池中获得连接项
    conn = pool.get_connection()
    conn.start_transaction() # 开启事务
    cursor = conn.cursor()
    sql = "update t_emp set sal = %s where ename = %s"
    cursor.execute(sql,(2000,"ZOYA"))
    conn.commit()
except Exception as e:
    print(e) # 打印异常信息,用于分析异常问题
    if "conn" in dir():
        conn.rollback()

2.Connector删除数据

2.1 Truncate table与Delete

截断数据表(TRUNCATE TABLE)是一个SQL命令,用于快速删除数据库表中的所有行。

截断数据表用于整表删除,不能回滚,且不能写where条件。

DELETE相比,速度远远高于delete,数据量越多效果越明显。

2.2 删除表实例

import mysql.connector.pooling
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
try:
    pool = mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)
    conn = pool.get_connection()
    conn.start_transaction()
    cursor = conn.cursor()
    # sql = "delete from t_emp"
    # 截断数据表
    sql = "truncate table t_emp"
    cursor.execute(sql)
    conn.commit()
except Exception as e:
    print(e) # 打印异常信息,用于分析异常问题
    if "conn" in dir():
        conn.rollback()

3.循环执行SQL语句

import mysql.connector.pooling
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
try:
    pool = mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)
    conn = pool.get_connection()
    conn.start_transaction()
    cursor = conn.cursor()
    # 循环执行sql语句
    sql = "insert into t_dept(deptno,dname,loc)values(%s,%s,%s)"
    data = [[120,"C部门","沈阳"],[130,"D部门","大连"]]
    cursor.executemany(sql,data) # 执行循环操
    conn.commit()
except Exception as e:
    print(e) # 打印异常信息,用于分析异常问题
    if "conn" in dir():
        conn.rollback()

4.综合练习

4.1 练习一

使用INSERT语句,把部门平均底薪超过公司平均底薪的这个部门里的员工信息导入到t_emp_new表里面,并且让这些员工隶属于sales部门。

编程思路:

  1. 构建连接池:使用mysql.connector.pooling.MySQLConnectionPool创建一个连接池,配置信息包括主机、端口、用户名、密码和数据库名。
  2. 获取连接并开启事务:从连接池中获取一个连接,并开启事务。
  3. 删除数据表t_emp_new:为了避免重名,首先删除已存在的t_emp_new表。
  4. 创建数据表t_emp_new:创建一个新的表t_emp_new,结构与t_emp表相同。
  5. 计算平均底薪:查询t_emp表的平均底薪。
  6. 查询大于平均底薪的部门:查询t_emp表中,平均底薪大于或等于上一步计算出的平均底薪的部门编号。
  7. 向新表中添加数据:将上一步查询出的部门的数据插入到t_emp_new表中。
  8. 删除原表t_emp中的数据:删除t_emp表中大于平均底薪的部门信息。注意:这里有一个小错误,表名应该是t_emp而不是t_emp_
  9. 查询部门编号:查询t_emp表中部门名为SALES的部门编号。
  10. 更新表中的部门编号:更新t_emp_new表中的所有记录的部门编号为上一步查询出的SALES部门编号。
  11. 异常处理:捕获并打印异常信息,如果发生异常则回滚事务。
import mysql.connector.pooling
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
try:
    pool = mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)
    conn = pool.get_connection()
    conn.start_transaction()
    cursor = conn.cursor()
    # 1.删除数据表t_emp_new,避免重名
    sql = "drop table t_emp_new"
    cursor.execute(sql)
    # 2.创建数据表t_emp_new
    # sql = "create table t_emp_new as (select * from t_emp)"
    sql = "create table t_emp_new like t_emp"
    cursor.execute(sql)
    # 3.完成业务 ①获得平均底薪
    sql = "select avg(sal) as avg from t_emp"
    cursor.execute(sql)
    avg = cursor.fetchone()[0]
    # ②查询大于平均底薪的部门
    sql = "select deptno from t_emp group by deptno having avg(sal) >= %s"
    cursor.execute(sql, [avg])
    temp = cursor.fetchall()
    # ③向新表中添加②中查询出的数据
    sql = "insert into t_emp_new select * from t_emp where deptno in ("
    for index in range(len(temp)):
        one = temp[index][0]
        if index < len(temp) - 1:
            sql += str(one)+ ","
        else:
            sql += str(one)
    sql += ")"
    cursor.execute(sql)
    # ④删除原表t_emp大于平均底薪的部门信息,SQL片段
    sql = "delete from t_emp where deptno in ("
    for index in range(len(temp)):
        one = temp[index][0]
        if index < len(temp) - 1:
            sql += str(one) + ","
        else:
            sql += str(one)
    sql += ")"
    cursor.execute(sql)
    # ⑤查询部门编号
    sql = "select deptno from t_dept where dname=%s"
    cursor.execute(sql, ['SALES'])
    deptno = cursor.fetchone()[0]
    # ⑥更新表中的部门编号
    sql = "update t_emp_new set deptno=%s"
    cursor.execute(sql, [deptno])
    conn.commit()
except Exception as e:
    print(e) # 打印异常信息,用于分析异常问题
    if "conn" in dir():
        conn.rollback()

4.2 练习二

编写一个INSERT语句向部门表插入两条记录,每条记录都在部门原有最大主键值的基础上+10。

import mysql.connector.pooling
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
try:
    pool = mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)
    conn = pool.get_connection()
    conn.start_transaction()
    cursor = conn.cursor()
    #完成业务
    sql = "insert into t_dept (select max(deptno)+10,%s,%s from t_dept union select max(deptno)+20,%s,%s from t_dept)"
    cursor.execute(sql,("A部门","北京","B部门","上海"))
    conn.commit()
except Exception as e:
    print(e) # 打印异常信息,用于分析异常问题
    if "conn" in dir():
        conn.rollback()

### 配置 PyCharm 连接 MySQL 数据库 #### 一、准备工作 在开始之前,确保已经安装并配置好 MySQL 数据库服务以及 Python 的 `pymysql` 或者 `mysql-connector-python` 库。可以通过以下命令来安装这些库: ```bash pip install pymysql mysql-connector-python ``` #### 二、具体步骤 1. **打开数据库工具窗口** 在 PyCharm 中,通过菜单栏选择 `View --> Tool Windows --> Database` 来打开数据库工具窗口[^2]。 2. **添加数据源** 在数据库工具窗口中,点击加号 (`+`) 图标,然后选择 `Data Source --> MySQL` 添加一个新的 MySQL 数据源[^3]。 3. **填写数据库连接信息** 填写必要的数据库连接参数,包括主机名(通常是 `localhost`)、端口号(默认为 `3306`)、用户名和密码等。如果尚未创建特定的数据库,可以在稍后阶段完成此操作[^4]。 4. **测试连接** 完成上述设置之后,点击右下角的 “Test Connection” 按钮验证是否能够成功建立到 MySQL 数据库的连接。如果有任何错误提示,按照指示解决问题;比如缺少 JDBC Driver,则可以直接点击链接自动下载所需驱动程序。 5. **执行 SQL 脚本** 成功连接至目标数据库后,在左侧导航树形结构里找到对应的表或者视图节点双击即可查看其内容。也可以在此界面编写新的查询语句并运行它们以管理您的数据[^1]。 #### 示例代码片段 下面展示一段简单的Python脚本来演示如何使用PyMySQL模块访问远程服务器上的MySQL实例: ```python import pymysql.cursors # Connect to the database connection = pymysql.connect(host='localhost', user='your_username', password='your_password', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: sql = "CREATE DATABASE IF NOT EXISTS testdb" cursor.execute(sql) finally: connection.close() ``` 以上代码展示了怎样安全地初始化一个新数据库实例,并且关闭资源释放通道。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值