数据库+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()

数据库+Python----------Python操作MySQL_第1张图片

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()

数据库+Python----------Python操作MySQL_第2张图片

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"])

你可能感兴趣的:(数据库,Python,mysql,数据库,python)