python读写mysql

Python MySQL 数据操作
本文介绍如何使用Python连接MySQL数据库,包括执行SQL查询和利用pandas将DataFrame数据写入数据库的方法。详细展示了通过自定义函数进行数据库连接、查询及关闭的过程,并比较了cursor与create_engine的不同用途。

目前用到的连接数据库,主要实现连个功能:1. 根据sql查询 2.将dataframe数据通过pandas包写入mysql数据库中

1. 根据sql查询:

    通常我们通过sql查询mysql中的表,分三步1.连接数据库 2.数据查询 3.关闭连接,如果需要查询的步骤较多,将查询封装成函数,通过参数传递sql代码会省事很多。

## 定义连接数据库函数
def my_db(host,user,passwd,db,sql,port= 3306,charset = 'utf8'):
    coon = pymysql.connect(host=host,
                           port=port,
                           user=user,
                           passwd = passwd,
                           db = db,
                           charset = charset
                           )
    cur = coon.cursor()
    cur.execute(sql)
    if sql.strip()[:6].upper() == 'SELECT':
        res = cur.fetchall()
    else:
        coon.commit()
        res = 'ok'
    cur.close()
    coon.close()
    return res

注意点: 1.端口一般为3306 ,且不能带引号

 2 . 将dataframe写入mysql ,本例选用to_sql() 

import pymysql
import pandas as pd
from sqlalchemy import create_engine

conn = create_engine('mysql+pymysql://用户名:密码@主机名:3306/数据库名',encoding='utf8')  
pd.io.sql.to_sql(数据框, mysql表名, conn, if_exists='replace')

3. cursor 和 create_engine 的区别:

 太复杂了,不懂-----

<think>我们正在讨论Python连接和操作MySQL数据库。根据引用内容,我们知道Python有一个通用的数据库访问接口——Python DBAPI。特别地,对于MySQL,我们可以使用`mysql.connector`库。步骤:1.安装mysql-connector-python库(如果尚未安装):在命令行中运行:`pip installmysql-connector-python`2.连接数据库:使用`mysql.connector.connect()`方法,传入主机名、用户名、密码和数据库名等参数。3.创建游标对象:使用连接对象的`cursor()`方法创建一个游标对象,用于执行SQL语句。4.执行SQL语句:使用游标的`execute()`方法执行SQL语句(如查询、插入、更新、删除等)。5.对于查询,获取结果:使用游标的`fetchall()`、`fetchone()`或`fetchmany()`方法获取查询结果。6.对于增删改操作,需要提交事务:使用连接对象的`commit()`方法提交事务,以确保更改被保存。7.关闭游标和连接:使用完毕后,关闭游标和连接。下面分别给出查询和写入的示例。查询示例(参考引用[1]):```pythonimport mysql.connector#连接数据库mydb= mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase" )#创建游标mycursor= mydb.cursor()#执行查询mycursor.execute("SELECT* FROMcustomers")#获取所有记录myresult =mycursor.fetchall() #输出结果for xin myresult:print(x)#关闭游标和连接mycursor.close()mydb.close() ```写入示例(插入数据): ```pythonimport mysql.connectormydb =mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase") mycursor =mydb.cursor() #插入一行数据sql ="INSERTINTO customers(name, address) VALUES(%s, %s)"val =("John", "Highway21") mycursor.execute(sql,val)#提交事务mydb.commit()print(mycursor.rowcount, "条记录插入成功。")mycursor.close() mydb.close()```注意:-使用参数化查询(%s占位符)可以防止SQL注入攻击。-插入、更新、删除等操作后必须调用`mydb.commit()`,否则更改不会保存。-如果发生错误,可以捕获异常(如`mysql.connector.Error`)并处理。异常处理(参考引用[3]):在操作数据库时,可能会遇到各种异常,例如连接失败、SQL语句错误等。我们可以使用try-except块来处理这些异常。例如: ```pythonimport mysql.connectorfrom mysql.connector importErrortry:mydb =mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase")mycursor =mydb.cursor()mycursor.execute("SELECT *FROM customers")myresult= mycursor.fetchall()forx inmyresult:print(x) exceptError ase:print(f"数据库错误: {e}")finally:if mydb.is_connected():mycursor.close()mydb.close() ```这样,即使发生错误,我们也能确保连接被关闭。另外,引用[2]提到Python支持多种数据库,但这里我们专注于MySQL。综上所述,使用Python操作MySQL数据库的步骤包括:安装库、连接数据库、创建游标、执行SQL、提交事务(写操作)、关闭连接。同时,建议使用异常处理来提高程序的健壮性。相关问题:1.如何处理数据库操作中的异常?2.如何执行批量插入操作?3.如何使用Python连接其他类型的数据库(如PostgreSQL)?</think>### Python连接和操作MySQL数据库的方法 以下是使用Python进行MySQL数据库操作的完整步骤: #### 1. **安装MySQL驱动** ```bash pip install mysql-connector-python # 或 pip install pymysql ``` #### 2. **连接数据库** ```python import mysql.connector # 创建数据库连接 db = mysql.connector.connect( host="localhost", # 数据库服务器地址 user="your_username", # 用户名 password="your_pwd", # 密码 database="your_db" # 数据库名 ) ``` #### 3. **基本操作流程 ```python # 创建游标对象 cursor = db.cursor() # 执行SQL查询 cursor.execute("SELECT * FROM users") # 获取结果 result = cursor.fetchall() # 获取所有数据 for row in result: print(row) # 执行数据写入 sql = "INSERT INTO users (name, age) VALUES (%s, %s)" val = ("张三", 25) cursor.execute(sql, val) db.commit() # 提交事务 # 关闭连接 cursor.close() db.close() ``` #### 4. **关键操作详解 - **查询数据**: ```python cursor.execute("SELECT name, email FROM users WHERE age > %s", (20,)) print(cursor.fetchone()) # 获取单条记录 ``` - **插入数据**: ```python data = [("李四", 30), ("王五", 28)] cursor.executemany(sql, data) # 批量插入 db.commit() ``` - **更新数据**: ```python update_sql = "UPDATE users SET age = %s WHERE name = %s" cursor.execute(update_sql, (26, "张三")) db.commit() ``` - **错误处理**: ```python try: cursor.execute(invalid_sql) except mysql.connector.Error as err: print(f"数据库错误: {err}") ``` #### 5. **连接池管理(高性能场景)** ```python from mysql.connector import pooling # 创建连接池 db_pool = pooling.MySQLConnectionPool( pool_name="mypool", pool_size=5, host='localhost', user='user', password='pwd', database='db' ) # 从连接池获取连接 connection = db_pool.get_connection() cursor = connection.cursor() # ...执行操作... cursor.close() connection.close() # 放回连接池 ``` #### 6. **最佳实践 1. **始终使用参数化查询**防止SQL注入 2. **操作后及时关闭**游标和连接 3. **写操作后必须执行**`commit()` 4. **使用上下文管理器**自动管理资源: ```python with db.cursor() as cursor: cursor.execute(...) # 自动关闭游标 ``` > **注意**:不同驱动包(mysql-connector-python/pymysql)的API基本兼容,但异常处理类名可能不同。操作数据库时发生的非用户控制错误(如连接断开)属于`OperationalError`,需要特殊处理[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值