使用python操作MySQL

发布时间:2026/6/26 8:53:08

使用python操作MySQL 一、第三方库pymysqlpip install pymysql二、操作mysqlimport pymysql# 创建连接 # 需要传入一些参数 # host是mysql所在的主机名或者是域名或者是ip地址 # port是mysql运行的端口号 # 命令行查询ps -aux | grep mysql 找到MySQL运行的进程号 # 命令行查询netstat -tnlp | grep mysql的进程号 找到MySQL的端口 # user 用户名 # passwd 密码 # db 指定要操作的数据库 conn pymysql.connect(hostmaster, port3306, userroot, passwd123456,dbstu_test) # 创建游标cursor cur conn.cursor() # cur.execute(use stu_test) # 切换数据库 # 准备SQL语句 sql_str1 SELECT t1.sid,t1.sname,t2.score from (SELECT sid,sname from Student where sid in (select t1.sid from ( SELECT sid,score from SC where cid 01) t1 left join ( SELECT sid,score from SC where cid 02 ) t2 on t1.sid t2.sid where t1.score ifnull(t2.score,0) ) ) t1 left join SC t2 on t1.sid t2.sid # 执行SQL语句 cur.execute(sql_str1) # 如果有返回值 可以通过cursor进行获取 print(cur.fetchone()) # 获取一条数据 print(# * 50) print(cur.fetchall()) # 获取所有数据 print(# * 50) print(cur.fetchmany(10)) # 获取指定大小的数据数据 # 如果没有返回值看后续自己处理三、JDBC连接Maven依赖dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.49/version /dependencypackage com.shujia; import java.sql.*; public class MySQLJDBCDemo { public static void main(String[] args) throws Exception { // 1、加载驱动 Class.forName(com.mysql.jdbc.Driver); // 2、创建连接 Connection conn DriverManager.getConnection(jdbc:mysql://master:3306/db1?useSSLfalse,root,123456); // 3、创建Statement Statement st conn.createStatement(); // 4、通过Statement执行SQL ResultSet rs st.executeQuery(select * from student); // 5、遍历ResultSet 获取返回的记录 while (rs.next()) { int id rs.getInt(id); String name rs.getString(name); int age rs.getInt(age); String gender rs.getString(gender); String clazz rs.getString(clazz); System.out.println(id,name,age,gender,clazz); } // 6、关闭连接 st.close(); conn.close(); } }四、JDBC连接池1.连接池是啥连接池是创建和管理一个连接的缓冲池的技术这些连接准备好被任何需要它们的线程使用。 连接池用于提高在数据库上执行命令的性能。连接池本质上就是数据库连接的缓存。使用数据库连接时如果池中有一个可用它将使用该连接而不是重新建立另一个新的连接 用完后不是关闭它而是将其放回池中。2.为什么要用连接池资源重用由于数据库连接得以重用避免了频繁创建释放连接引起的大量性能开销。在减少系统消耗的基础上另一方面也增加了系统运行环境的平稳性。更快的系统反应速度**:数据库连接池在初始化过程中往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言直接利用现有可用连接避免了数据库连接初始化和释放过程的时间开销从而减少了系统的响应时间。新的资源分配手段**对于多应用共享同一数据库的系统而言可在应用层通过数据库连接池的配置实现某一应用最大可用数据库连接数的限制避免某一应用独占所有的数据库资源。统一的连接管理避免数据库连接泄露在较为完善的数据库连接池实现中可根据预先的占用超时设定强制回收被占用连接从而避免了常规数据库连接操作中可能出现的资源泄露。3.常见的数据连接池4.各数据库连接池测试结论1性能方面 HikariCPDruidtomcat-jdbcdbcpc3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。2druid功能最为全面sql拦截等功能统计数据较为全面具有良好的扩展性。3综合性能扩展性等方面可考虑使用druid或者hikariCP连接池。4可开启prepareStatement缓存对性能会有大概20%的提升。5.HikariCP连接池的使用官网地址https://github.com/brettwooldridge/HikariCPMaven依赖dependency groupIdcom.zaxxer/groupId artifactIdHikariCP/artifactId version4.0.3/version /dependency连接池初始化// 配置 HikariConfig config new HikariConfig(); config.setJdbcUrl(jdbc:mysql://master:3306/db1); config.setUsername(root); config.setPassword(123456); config.addDataSourceProperty(connectionTimeout, 1000); // 连接超时1秒 config.addDataSourceProperty(idleTimeout, 60000); // 空闲超时60秒 config.addDataSourceProperty(maximumPoolSize, 16); // 最大连接数16 config.addDataSourceProperty(useSSL, false); // 关闭使用SSL连接 // 创建连接池实例 DataSource ds new HikariDataSource(config);使用连接池try (Connection conn ds.getConnection()) { // 通过ds获取连接 ... } // 在此“关闭”连接

相关新闻