1、导入模块+创建连接

import pymysql

# 1、通过python去连接数据库
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="admin123.",db="test_python_1",charset="utf8")

  

2、创建游标,通过游标就可以执行sql命令

# 2、创建游标
test_cursor = conn.cursor()

  

3、通过游标执行sql命令,插入一条数据

插入前的表的内容

执行命令

# 3、执行一个插入的命令
r = test_cursor.execute("insert into test(name,age) VALUES ('999',23)")

  

这里的r的值就受影响的行的数目

这里要注意,如果执行修改相关的命令,则必须要commit才能生效,commit操作由数据库连接的对象的操作,而不是通过游标去执行

# 4、提交数据
conn.commit()

  

查看表中的内容,已经多了一条数据

4、python的数据交互,由pymysql内部做参数传递

inp = input("请输入姓名:")
r = test_cursor.execute("insert into test(name,age) VALUES (%s,34)",inp)
# 这里可以用字符串拼接,也可以使用pymysql内部给我们做字符串拼接
# 字符串拼接是可以的,但是这里禁止操作的,这里会引起sql注入,所以不能这么使用 print(r)
# 这里的r的意思受影响的行数

我们看表中的数据已经更新

上面只传递了一个参数,如果有多个参数,该怎么传递呢?这里要传递一个元组进去

inp = input("请输入姓名:")
inp_age = input("请输入年龄:")
r = test_cursor.execute("insert into test(name,age) VALUES (%s,%s)",(inp,inp_age))

  

我们看到数据库的表中的数据已经更新

上面的例子我们只插入了一条数据,那么如果我们想一次插入多条数据该怎么弄呢?解决办法看下面的例子,要用excutemany命令来执行,然后通过列表或者元组把参数传递进去

user_info_list = [
("cui1",23),
("cui2",24),
("cui3",25)
] r = test_cursor.executemany("insert into test(name,age) values (%s,%s)",user_info_list)
print(r)

  

我们可以看到数据库的表中已经有数据更新

4、通过pymysql更新数据库中的内容

r = test_cursor.execute("update test set name = %s where age = 25","张国军")

print(r)

  

我们可以看到数据库的表中的内容已经更新

5、通过pymysql删除数据库表中的内容

r = test_cursor.execute("delete from test where age = 25")
print(r)

  

我们可以看到表中的数据已经更新

6、通过pymysql查询数据,如果是查数据,则不需要commit

r = test_cursor.execute("select * from test")
print(test_cursor.fetchone())
print(test_cursor.fetchone())
print(test_cursor.fetchmany(2))
print(test_cursor.fetchall())

  

我们注意数据库中的内容

我们看pymysql得到的结果

我们可以看到上面有一个指针的概念,第一条数据被取出来后,第二次在取数据,则就从第二条数据开始取,那么我们有没有办法移动指针呢?当然有,我们看下面的例子

7、移动指针

绝对的方式移动指针

r = test_cursor.execute("select * from test")
print(test_cursor.fetchone())
test_cursor.scroll(0,mode = "absolute")
# 这里的意思,absolute是绝对的意思,让指针回到0的位置 print(test_cursor.fetchone())

  

我们可以看到2次取的数据是一样的

相对的方式移动指针

r = test_cursor.execute("select * from test")
print(test_cursor.fetchone())
# test_cursor.scroll(0,mode = "absolute")
# 这里的意思,absolute是绝对的意思,让指针回到0的位置 test_cursor.scroll(2,mode="relative")
# 这里的意思,relative是相对的意思,相当当前的位置向下移动2个位置,这里如果是负数的话,是向上移动,如果是正数,则向下移动

  

我们注意数据库中的表的顺序

我们看下pymysql执行的结果

pymysql基本的使用方法的更多相关文章

  1. Python3.5 + django1.8.5 安装”import pymysql pymysql.install_as_MySQLdb()”的解决方法

    最近在学习Python,打算先看两个在线教程,再在github上找几个开源的项目练习一下,在学到"被解放的姜戈"时遇到django同步数据库时无法执行的错误,记录一下. 错误现象: ...

  2. 在pycharm中导入PyMysql出错,解决方法

    在写Django项目的时候,需要用到数据库中的数据,我们在pycharm中需导入  import PyMySQL; 如果没有该模块会报错,像我这样: 如果你的错误像我这样,那么你按照我的方法应该能搞好 ...

  3. Pymysql的常见使用方法

    cursor.fetchone()与cursor.fetchall()的区别: cursor.fetchone():只能显示一个数据 cursor.fetchall():才能显示查出来的所有数据  P ...

  4. pymysql安装和使用

    一.pymysql安装 安装mymysql前请确认python环境已经准备好,在之前的博文http://www.cnblogs.com/newzol/p/8682176.html有说明pythonwe ...

  5. 第二百八十一节,MySQL数据库-SQL注入和pymysql模块防止SQL注入

    MySQL数据库-SQL注入和pymysql模块防止SQL注入 SQL注入就是通过SQL语句绕开程序判断,获取到数据库的内容 下面以一个简单的程序登录SQL注入举例: 正常登录 1.数据库有一张会员表 ...

  6. MySQL 之Navicat Premium 12安装使用、pymysql模块使用、sql注入问题的产生与解决

    本文内容提要: Navicat Premium 12 的介绍.使用. pymysql模块的使用 sql注入问题的产生与解决 -------------------------------------- ...

  7. python爬虫入门七:pymysql库

    我们使用python爬取得到的数据,有时候会数据量特别大,需要存入数据库. 需要注意的是,MySQL是一种关系型数据库管理系统,利用MySQL可以对数据库进行操作,而MySQL并不是一个数据库. 而p ...

  8. MySQLdb和pymysql区别

    MySQLdb要快点,原因是这个是C写的,速度快 MySQLdb只支持Python2.x,还不支持3.x 可以用PyMySQL代替.安装方法:pip install PyMySQL 然后在需要的项目中 ...

  9. pymysql ,主键, 索引

    目录 一.pymysql模块的使用 1. 安装pymysql 2. 连接MySQL 3. sql注入问题 二.索引 1. 什么是索引 2. 索引有什么用 3. 索引的底层原理 4. 主键 5. MyS ...

随机推荐

  1. nodejs基础: 如何升级Noejs版本

    Node.js的开发非常活跃,它的最新稳定版本也频繁变化,你不时会发现,一个模块不能在你当前的Node版本上使用,此时你需要升级Node 幸运的是,可以用一种非常简单的方法来管理你的Node版本,即使 ...

  2. VS自动编译脚本

    rem ************************************************rem * Script to compile the solutions of IdealOE ...

  3. springboot根据不同的条件创建bean,动态创建bean,@Conditional注解使用

    这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思. 倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的be ...

  4. flask中的蓝图与红图

    内容: 1.flask中的蓝图 2.flask子域名实现 3.flask中的红图 1.flask中的蓝图 一个大型项目中视图比较多,如果仅仅是写在app.py中不方便管理,蓝图就可以做到分功能分目录结 ...

  5. vb 读取指定路径文件名

    Private Sub ExportCostSheetData() InsertRow("") InsertRow("Run 2:Export CostingSheet= ...

  6. uva-705-深搜

    题意,就是根据斜线组成的迷宫,判断能够组成多少个闭环. 解法: 放大俩倍或者三倍 俩倍 \     ------->10 01 三倍 \ ------->100 010 001 然后深搜, ...

  7. python入门-异常

    1 报错的例子 print(5/0) 2跳过报错的例子 try: print(5/0) except ZeroDivisionError: print("You can't divide b ...

  8. 0_Simple__simpleTexture + 0_Simple__simpleTextureDrv

    使用纹理引用来旋转图片,并在使用了静态编译和运行时编译两种环境. ▶ 源代码:静态编译 #include <stdio.h> #include <windows.h> #inc ...

  9. maven项目中的报错问题——Dynamic Web Module 3.0 requires Java 1.6 or newer.

    转自:http://www.cnblogs.com/beppezhang/p/5919221.html maven项目中的报错问题——Dynamic Web Module 3.0 requires J ...

  10. myeclipse配置gradle插件

    首先,到Gradle官网下载最新版的gradle,已经到了2.13了 下载地址是 http://gradle.org/gradle-download/ 下载下来解压到任意目录 然后配置Windows环 ...