数据库+Python----------Python操作MySQL

目录

1.在Python中安装pymysql

2.创建数据

1.连接数据库,创建一个数据库对象

2.开启游标功能,创建游标对象

3.发送指令

获取查询结果集的方法

4.实操

模板

案例

5.注意 

不可以!!!

正确写法

6.用户输入数据

3.查询数据 

4.增、删、改数据


1.在Python中安装pymysql

pip3.9 install pymysql

2.创建数据

参数描述
host可选。规定主机名或 IP 地址。
username可选。规定 MySQL 用户名。
password(passwd)可选。规定 MySQL 密码。
database(db)可选。规定默认使用的数据库。(所用的数据库名
port可选。规定尝试连接到 MySQL 服务器的端口号。
socket可选。规定 socket 或要使用的已命名 pipe。

1.连接数据库,创建一个数据库对象

conn=pymysql.connect(
    host="localhost",
    port=3306,
    user="root",
    db="case",
    passwd="cheng0214",
    charset="utf8"
)

2.开启游标功能,创建游标对象

  • 在使用pymysql.connect() 方法与数据库建立连接后,想要操作数据库时,就需要使用游标 Cursor通过连接好的数据库(此处为conn,该处的名称可自己决定)调用 cursor() 方法即可返回一个新的游标对象,在连接没有关闭之前,游标对象可以反复使用
# 这里使用的是数据库对象conn中的cursor()方法,
cursor = conn.cursor()
# 这个语句使用了pymysql库中的cursor方法来创建一个字典类型的游标对象。这个游标对象可以用来执行SQL查询,并将结果以字典的形式返回。
cursor = conn.cursor(cursor=pymysql.cursor.DictCursor)
  •  游标类型
类型描述
Cursor普通的游标对象,默认创建的游标对象
SSCursor不缓存游标,主要用于当操作需要返回大量数据的时候
DictCursor以字典的形式返回操作结果
SSDictCursor不缓存游标,将结果以字典的形式进行返回

3.发送指令

  • 调用 cursor.execute(sql) 方法查询数据

获取查询结果集的方法

Connection类提供了三个方法: begin 开始事务, commit 提交事务, rollback 回滚事务,如果通过 sql 语句对数据库中的数据进行了修改, 则需要提交事务。

db.commit()

这是一个Python中的数据库操作函数。它通常用于提交事务,将所有在事务内进行的修改永久保存到数据库中。在执行INSERT、DELETE、UPDATE等操作时,必须使用该函数才能使操作生效。如果不提交,所有的修改将不会被保存。

4.实操

模板

import pymysql
 
# 打开数据库连接
db = pymysql.connect(  
            host='localhost',  # 连接的数据库服务器主机名
            port=3306,  # 数据库端口号
            user='###',  # 数据库登录用户名
            passwd='###',
            db='###',  # 数据库名称)
 
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
 
# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
 
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
 
print ("Database version : %s " % data)
 
# 关闭数据库连接
db.close()

案例

import pymysql

# 1.连接MySQL (connect)连接
conn=pymysql.connect(
    host="localhost",
    port=3306,
    user="root",
    db="case",
    passwd="cheng0214",
    charset="utf8")
# 创建连接,创建游标(cursor),基于cursor发送指令,用游标execute执行sql语句,然后断开连接
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
# 只是生成了命令,没有提交
cursor.execute("insert into admin(username,password,mobile) value ('cheng','123','1507')")
# 所以需要commit提交一下,也可以在db=‘’后面加,autocommit=True 这样不写commit()也是可以的
conn.commit()

# 3.关闭
cursor.close()
conn.close()

5.注意 

不可以!!!

# 千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入
sql="insert into admin(username,password,mobile) value ('cheng','123','1507')"
cursor.execute(sql)
conn.commit()

正确写法

sql="insert into admin(username,password,mobile) value (%s,%s,%s)"
cursor.execute(sql,["cheng","123","1507"])
conn.commit()
sql="insert into admin(username,password,mobile) value (%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql, {"n1":"cheng","n2":"123","n3":"1507"})
conn.commit()

6.用户输入数据

import pymysql

while True:
    user = input("用户名:")
    if user.upper()=='Q':
        break
    pwd = input("密码:")
    mobile = input("手机号:")

    # 1.连接MySQL (connect)连接
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        user="root",
        db="case",
        passwd="cheng0214",
        charset="utf8")
    # 创建连接,创建游标(cursor),基于cursor发送指令,用游标execute执行sql语句,然后断开连接
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    # 2.发送指令
    # 只是生成了命令,没有提交
    sql = "insert into admin(username,password,mobile) value (%s,%s,%s)"
    cursor.execute(sql, [user,pwd,mobile])
    conn.commit()

    # 3.关闭
    cursor.close()
    conn.close()

user.upper():upper() 方法将字符串中的小写字母转为大写字母。

3.查询数据 

import pymysql

# 1.连接MySQL
conn = pymysql.connect(
    host="localhost",
    port=3306,
    user="root",
    db="case",
    passwd="cheng0214",
    charset="utf8")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
sql = "select * from admin"
cursor.execute(sql)
data_list=cursor.fetchall()
print(data_list)

# 3.关闭
cursor.close()
conn.close()

print(data_list): 返回的是字典

for row_dict in data_list:
    print(row_dict)

  •   当调用 cursor.execute(sql) 方法查询数据的时候,如果执行成功,获取查询的结果集的方法有
名称说明
fetchall()返回剩下的所有行,如果走到末尾,就返回空元组,否则返回一个元组,其元素是每一行的记录封装的一个元组(得到的是:{字典,字典}或者空列表)
fetchone()获取结果集的下一行(得到的是:字典或者None)
fetchmany(size=None)size指定返回的行数,None则返回空元组
cursor.rownumber返回当前行号.可以修改,支持负数
cursor.rowcount返回的总行数

4.增、删、改数据

  • 在进行新增、删除、修改时,一定要记得commit,不然数据库么有数据。
sql = "..."
cursor.execute(sql)
conn.commit()
  •  在查询时,不需要commit,执行fetchall / fetchone
cursor.execute("...")
# 第一条数据,字典,无数据时是空列表
vl = cursor.fetchone()
# 所有数据,列表套字典,无数据时是None
vl = cursor.fetchall()
  • 对于SQL语句不要用Python的字符串格式化进行拼接(会被SQL注入),一定要用execute+参数
cursor.execute(".%s.......%s",["xx","xx"])

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值