Python3-22/456-004 Python操作MySQL

        在Python3中,使用pymysql操作MySQL数据库数据。此外,还有Python官方提供的mysql-connector,以及第三方的MySQLdb(py2)和pymysql(py3)。

        pymysql操作MySQL数据库的流程有几个流程要点:

        1. 引入pymysql API模块

        2. 获取与MySQL  Server的连接地址

        3. 获取游标(cursor)

        4. 执行SQL或存储过程

        5. 关闭游标

        6. 关闭连接

一、安装pymysql模块

pip install pymysql

二、游标以及连接池概念

        游标:是处理数据的一种方法,为查看或处理结果集中数据,游标提供了在结果集中一次一行或多行前进或向后浏览数据的能力。可以把游标当作是一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。通俗的说,就是操作数据和获取数据库结果都需要通过游标来操作。

conn = mysql ip    #获取MySQ Server地址,注意charset等参数说明
cursor = conn.cursor()    #创建游标,游标是可以移动的,cursor.scroll()
cursor.execute(sql)    #执行SQL
cursor.fetchone()    #获取数据
cursor.fetchall()    #获取数据
cursor.commit()    #提交数据
cursor.rollback()    #回滚数据
cursor.close()    #关闭游标
conn.close()    #关闭连接,相当于mysql>exit

        连接池:应用端通过数据库连接池连接db,数据库连接池其实就是喝数据库建立了持续的TCP连接,从而达到数据库连接的资源复用。

三、pymysql连接MySQL数据库

import pymysql
mysqlconn = pymysql.connect(host='192.168.26.173',
                            user='python',
                            password='passwd',
                            port=3306,
                            database='test',
                            charset='utf8')
cursor = mysqlconn.cursor()

四、pymysql操作MySQL数据

4.1 创建一张测试表employee

cursor.execute("drop table if exists employee")
create_sql = "create table employee(first_name varchar(20) not null, last_name varchar(20), age int, sex char(1), income float )"
cursor.execute(create_sql)

4.2 插入employee一条数据

insert_sql = "insert into employee(first_name, last_name, age, sex, income) values('Mac', 'Moban', 20, 'M', 30000)"


try:
    cursor.execute(insert_sql)
    mysqlconn.commit()
    print("数据库插入成功!")

 except:
    mysqlconn.rollback()
    print("数据库插入失败!")

4.3 获取(查询)数据

fetchone():获取一行数据,返回一个元组数据(即一维元组),如果没有数据,则返回None,即MySQL的null

fetchall():获取所有行的数据,返回一组元组数据(即二维元组),如果没有数据,则返回()

select_sql = 'select * from employee where income>{}'.format(20000)
try:
    '''
    以下测试fetchone和fetchall的区别是啥?
    1. 区别一如下:
    fetchone:
    <class 'tuple'>
    ('Mac', 'Moban', 20, 'M', 30000.0)
    ERROR: unable to fetch data!
    
    fetchall:
    <class 'tuple'>
    (('Mac', 'Moban', 20, 'M', 30000.0),)
    '''
    cursor.execute(select_sql)

    results = cursor.fetchone()
    print(results)
    print("fname = {},lname = {}, age = {}, sex = {}, income = {}".format(results[0], results[1], results[2], results[3], results[4]))

except:
    print("ERROR: unable to fetch data!")


('Mac', 'Moban', 20, 'M', 30000.0)
fname = Mac,lname = Moban, age = 20, sex = M, income = 30000.0
select_sql = 'select * from employee02 where income>{}'.format(20000)
try:
    '''
    以下测试fetchone和fetchall的区别是啥?为啥以下的for循环对fetchone不管用了?
    1. 区别一如下:
    fetchone:
    <class 'tuple'>
    ('Mac', 'Moban', 20, 'M', 30000.0)
    ERROR: unable to fetch data!
    
    fetchall:
    <class 'tuple'>
    (('Mac', 'Moban', 20, 'M', 30000.0),)
    '''
    cursor.execute(select_sql)
    results = cursor.fetchall()
    print(results)
    for row in results:
        fname = row[0]
        lname = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        print("fname = {},lname = {}, age = {}, sex = {}, income = {}".format(fname, lname, age, sex, income))
except:
    print("ERROR: unable to fetch data!")


(('Mac', 'Moban', 20, 'M', 30000.0),)
fname = Mac,lname = Moban, age = 20, sex = M, income = 30000.0

4.4 增删改操作参考4.3的查询获取操作,加上一些cursor.commit()或cursor.rollback()操作

几点待深入理解:

1. pymysql连接池的使用

2. 一维和二维元组

3. 如何把pymysql增删改查操作封装一个类

4. pymysql防sql注入

5. pymysql默认select获取得到的数据是元组类型,如何转化为字典等类型

6. 获取多行以及执行多行操作 fetchmany() executemany() 

7. 获取自增id

8. 游标移动 cursor.scroll()

【参考】

Python中操作mysql的pymysql模块详解 - 明天OoO你好 - 博客园

Python之pymysql的使用 - liubinsh - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要安装 `mysql-connector` 模块,可以使用以下命令进行安装: ``` pip install mysql-connector-python ``` 然后,可以使用以下代码将订单和司机匹配情况以及成本记录在MySQL数据库中: ```python import mysql.connector # 连接MySQL数据库 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) # 获取指向数据库的游标 mycursor = mydb.cursor() # 创建订单表 mycursor.execute("CREATE TABLE IF NOT EXISTS orders (id INT AUTO_INCREMENT PRIMARY KEY, customer_name VARCHAR(255), pickup_location VARCHAR(255), destination VARCHAR(255), driver_name VARCHAR(255), cost INT)") # 创建司机表 mycursor.execute("CREATE TABLE IF NOT EXISTS drivers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), location VARCHAR(255))") # 插入订单数据 sql = "INSERT INTO orders (customer_name, pickup_location, destination, driver_name, cost) VALUES (%s, %s, %s, %s, %s)" val = ("John", "123 Main St", "456 Oak St", "Mike", 50) mycursor.execute(sql, val) mydb.commit() # 插入司机数据 sql = "INSERT INTO drivers (name, location) VALUES (%s, %s)" val = ("Mike", "Downtown") mycursor.execute(sql, val) mydb.commit() # 查询订单数据 mycursor.execute("SELECT * FROM orders") myresult = mycursor.fetchall() for x in myresult: print(x) # 查询司机数据 mycursor.execute("SELECT * FROM drivers") myresult = mycursor.fetchall() for x in myresult: print(x) ``` 以上代码将创建一个名为 `orders` 的订单表和一个名为 `drivers` 的司机表,并将一些数据插入到这些表中。然后,使用 `SELECT` 语句查询这些表中的数据并打印出来。 请注意,这只是一个简单的示例,实际应用中需要根据具体情况进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值