博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pymysql
阅读量:4454 次
发布时间:2019-06-07

本文共 6155 字,大约阅读时间需要 20 分钟。

关于pymysql

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

Django中也可以使用PyMySQL连接MySQL数据库。

安装:

pip install pymysql

注意:

在进行本文以下内容之前需要注意:

  • 你有一个MySQL数据库,并且已经启动。
  • 你有可以连接该数据库的用户名和密码
  • 你有一个有权限操作的database

连接数据库:

方式一:(有bug)

import pymysqlinputName = input('name:')inputPwd = input('pwd:')# 连接databaseconn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8")cursor = conn.cursor()  # 得到一个可以执行SQL语句的光标对象sql = "select * from userinfo where name='%s' and pwd = '%s';" % (inputName, inputPwd)      # '%s'这个引号要带上print(sql)ret = cursor.execute(sql)  # 执行SQL语句cursor.close()  # 关闭光标conn.close()  # 关闭数据库连接if ret:    print('登录成功')else:    print('登录失败')
View Code

运行:

第一种情况:输入:    name:   zhou' -- kitty12322343          # 相当于把后面的都给注释了    pwd:    abcd输出:    select * from userinfo where name='zhou' -- kitty12322343' and pwd = 'abcd';    登录成功第二种情况:输入:    name:kitty' or 1=1 -- haha          # 1=1就是True    pwd:abcd输出:    select * from userinfo where name='kitty' or 1=1 -- haha' and pwd = 'abcd';    登录成功
View Code

正确的链接数据库姿势:

import pymysqlinputName = input('name:')inputPwd = input('pwd:')# 连接databaseconn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8")cursor = conn.cursor()  # 得到一个可以执行SQL语句的光标对象sql = "select * from userinfo where name=%s and pwd=%s;"        # %s也不用加引号了print(sql)ret = cursor.execute(sql, [inputName, inputPwd])  # 执行SQL语句         # 通过这种方式传参数,就没有bug了============================字典方式:cursor.execute("select * from userinfo where name=%(user)s and pwd=(pwd)%s;" , {
'user'='zhou', 'pwd'='123'} )============================cursor.close() # 关闭光标conn.close() # 关闭数据库连接if ret: print('登录成功')else: print('登录失败')

增删改查操作

1、增

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"username = "zhou"age = 18# 执行SQL语句cursor.execute(sql, [username, age])# 提交事务conn.commit()cursor.close()conn.close()

插入数据失败回滚:

-------------- conn.rollback()

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"username = "zhou"age = 18try:    # 执行SQL语句    cursor.execute(sql, [username, age])    # 提交事务    conn.commit()except Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()

批量执行操作:

-------------executemany()

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"data = [("zhou", 18), ("zhi", 20), ("long", 21)]try:    # 批量执行多条插入SQL语句    cursor.executemany(sql, data)    # 提交事务    conn.commit()except Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()

获取插入数据的ID(关联表格操作时会用到)

------------- cursor.lastrowid

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"username = "zhou"age = 18try:    # 执行SQL语句    cursor.execute(sql, [username, age])    # 提交事务    conn.commit()    # 提交之后,获取刚插入的数据的ID    last_id = cursor.lastrowidexcept Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()

2、删

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()sql = "DELETE FROM USER1 WHERE id=%s;"try:    cursor.execute(sql, [4])    # 提交事务    conn.commit()except Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()

3、改

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()# 修改数据的SQL语句sql = "UPDATE USER1 SET age=%s WHERE name=%s;"username = "kitty"age = 88try:    # 执行SQL语句    cursor.execute(sql, [age, username])    # 提交事务    conn.commit()except Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()

4、查

查询单条数据:

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()# 查询数据的SQL语句sql = "SELECT id,name,age from USER1 WHERE id=1;"# 执行SQL语句cursor.execute(sql)# 获取单条查询数据ret = cursor.fetchone()             cursor.close()conn.close()# 打印下查询结果print(ret)                          # (1, 'zhou', '123456')   从光标开始处,拿到一条数据,拿到数据后,光标向下移动一行

查询多条数据:

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()# 查询数据的SQL语句sql = "SELECT id,name,age from USER1;"# 执行SQL语句cursor.execute(sql)             # 这个得到一个数据总数# 获取多条查询数据ret = cursor.fetchall()        # 拿到所有的数据 cursor.close()conn.close()# 打印下查询结果print(ret)

进阶用法:

# 可以获取指定数量的数据cursor.fetctmany(3)                 # 从光标开始处,拿到3条数据, 拿到数据后,光标向下移动3行# 光标按绝对位置移动1                                绝对定位:从0开始移动光标cursor.scroll(1, mode="absolute")             只能是: 正数# 光标按照相对位置(当前位置)移动1             相对定位:相对于当前光标位置      (默认)cursor.scroll(1, mode="relative")               正数:向下       负数:向上

示例:

import pymysqlinputName = input('name:')inputPwd = input('pwd:')conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8")cursor = conn.cursor()  # 得到一个可以执行SQL语句的光标对象sql = "select * from userinfo;"cursor.execute(sql)ret1 = cursor.fetchmany(3)              # 取2个,光标位置准备取第3条数据cursor.scroll(1,mode='absolute')        ret2 = cursor.fetchone()                    # 光标绝对移动,从0开始移动,所以取第2条数据cursor.close()  # 关闭光标conn.close()  # 关闭数据库连接print(ret1)      # ((1, 'zhou', '123456'), (2, 'long', '123456')), (3, 'zhi', '123456'))print(ret2)      # (2, 'long', '123456')

 

转载于:https://www.cnblogs.com/zhzhlong/p/9301648.html

你可能感兴趣的文章
Office之什么是高内聚低耦合
查看>>
一些奇怪的问题求回答
查看>>
这些年踩过的坑
查看>>
iOS开发拓展篇——如何把项目托管到GitHub
查看>>
性能优化之数据库优化
查看>>
类的继承、菱形继承、派生、多态
查看>>
mysql约束
查看>>
javascript鼠标及键盘事件总结及案例
查看>>
mysql表之间的关系及级联操作
查看>>
mac 搭建virtualenv的那些坑
查看>>
多路复用IO模型
查看>>
并发、串行、并行及多道技术原理
查看>>
hashlib、pickle、hmac、logging模块使用
查看>>
javascript常用知识点总结
查看>>
2019秋招复习笔记--数据库基本操作
查看>>
2019秋招复习笔试--手写代码
查看>>
2019秋招复习笔记--智力题
查看>>
MySQL学习笔记
查看>>
2019秋招面试复习 项目重点提问
查看>>
面试题
查看>>