python pymsql 下载_Python pymsql模块

pymsql

基本使用

首先要下载

pip install pymsql

以下是

import pymysql

# 链接,C/S架构,TCP链接

conn = pymysql.connect(

host="localhost",

database="db1",

charset="utf8mb4",

user="root",

cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示

# password = "your password",

)

# 游标

cursor = conn.cursor()

# 执行sql

sql = "show tables"

res = cursor.execute(sql) # 提交执行,返回sql影响成功的行数

print(res) # 2 代表该数据库下有2个表

print(cursor.fetchall()) # [{'Tables_in_db1': 't1'}, {'Tables_in_db1': 't2'}]

cursor.close() # 关闭游标

conn.close()

游标概念

可以看到在上面的示例中有一个游标的概念,其实这个也非常简单,就等同于光标的上下移动,每移动一次代表一条记录。

在pymsql中,对于select等操作返回的结果都可以通过游标的移动配合相应方法函数来进行读取。

sql注入

如果你的某些sql语句要进行字符串拼接,那么一定要使用pymysql提供的execute()方法进行拼接,不要去用%或format()方法,这可能导致出现sql注入问题带来不安全的隐患。

注意:使用execute()时,不可传入表名,数据库名。否则会抛出语法错误,这是因为在拼接时会自动添加上“号

import pymysql

# 链接

conn = pymysql.connect(

host="localhost",

database="db1",

charset="utf8mb4",

user="root",

cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示

# password = "your password",

)

# 游标

cursor=conn.cursor()

# 执行sql

sql = "select * from t1 where id=%s"

res = cursor.execute(sql,("1",)) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题

print(res) # 1 查出一条记录

print(cursor.fetchall()) # 拿到所有记录的结果

cursor.close() # 关闭游标

conn.close()

事务提交

在执行UPDATE/INSERT/DELETE之类的操作,必须使用conn.commit()进行事务提交后方可生效。

或者你可以在实例化conn对象时为他指定auto_commit参数为true即可自动提交事务。

import pymysql

# 链接

conn = pymysql.connect(

host="localhost",

database="db1",

charset="utf8mb4",

user="root",

cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示

autocommit = True, # 自动提交

# password = "your password",

)

# 游标

cursor=conn.cursor()

# 执行sql

sql = "insert into t1(name) values(%s)"

res = cursor.execute(sql,("新记录",)) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题

print(res) # 1 成功插入一条记录

print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号

print(cursor.fetchall())

# conn.commit() # 手动提交

cursor.close() # 关闭游标

conn.close()

提交多条

使用cursor.executemany()方法可一次性提交多条sql操作。

import pymysql

# 链接

conn = pymysql.connect(

host="localhost",

database="db1",

charset="utf8mb4",

user="root",

cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示

autocommit = True, # 自动提交

# password = "your password",

)

# 游标

cursor=conn.cursor()

# 执行sql

sql = "insert into t1(name) values(%s)" # 同一条命令,执行3次

res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")]) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题

print(res) # 3 成功插入三条记录

print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号

print(cursor.fetchall())

cursor.close() # 关闭游标

conn.close()

游标相关

获取到一条记录后,我们可以控制游标移动。

也可以控制查看游标后的多少条记录

游标每移动一次代表一条记录

命令解析

描述

cursor.scroll(3,mode=’absolute’)

游标以绝对位置向后移动3条记录

cursor.scroll(3,mode=’relative’)

游标以当前位置向后移动3条记录

注意:游标移动的条数即为记录的条数,如果移动值为负N就代表上N条记录

如果我们想获取记录,可使用以下三个方法

命令解析

描述

cursor.fetchone()

获取第一条记录,游标向下移动一行

cursor.fetchmany(2)

获取接下来的两条记录,游标向下移动两行

cursor.fetchall()

获取全部记录,游标移动到末尾,返回的是一个列表

import pymysql

# 链接

conn = pymysql.connect(

host="localhost",

database="db1",

charset="utf8mb4",

user="root",

cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示

autocommit = True, # 自动提交

# password = "your password",

)

# 游标

cursor=conn.cursor()

# 执行sql

sql = "select * from t1" # t1表中4条记录

cursor.execute(sql)

print(cursor.fetchone()) 游标移动到2的位置

cursor.scroll(2,mode='relative') 向下移动2,当前游标为4

print(cursor.fetchone())

cursor.close() # 关闭游标

conn.close()

"""

{'id': 1, 'name': '记录1'}

{'id': 4, 'name': '记录4'}

"""

插入行号

如果执行的是INSERT操作,可以在插入后查看最后插入的ID行号

import pymysql

# 链接

conn = pymysql.connect(

host="localhost",

database="db1",

charset="utf8mb4",

user="root",

cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示

autocommit = True, # 自动提交

# password = "your password",

)

# 游标

cursor=conn.cursor()

# 执行sql

sql = "insert into t1(name) values(%s)" # 同一条命令,执行3次

res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")]) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题

print(res) # 3 成功插入三条记录

print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号

print(cursor.fetchall())

# conn.commit() # 手动提交

cursor.close() # 关闭游标

conn.close()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值