pymysql的使用

1.取得 MYSQL 的版本

import pymysql
import getpass # 该模块无法在pycharm中使用

con = None
try:
    pwd = getpass.getpass("请输入root账户密码:")
    # 连接mysql的方法,connect('ip', 'user', 'password', 'dbname')
    con = pymysql.connect('localhost', 'root', pwd, 'test');

    # 所有的查询都是连接con的一个模块cursor上面运行的
    cur = con.cursor()

    # 执行一个查询
    cur.execute("SELECT VERSION()")
    # 取得上个查询的结果,是单个结果

    data = cur.fetchone()
    print("Database version: ", data)
finally:
    if con:
        con.close()

运行结果如下:

2.创建一个表,并插入数据

import pymysql as py
import sys
import getpass

pwd = getpass.getpass("请输入root账户密码:")
#将 con 设定为全局连接
con = py.connect('localhost', 'root', pwd, 'test');
with con:
    #获取连接的 cursor,只有获取了 cursor,我们才能进行各种操作
    cur = con.cursor()

    #创建一个数据表 writers(id,name)
    cur.execute("CREATE TABLE IF NOT EXISTS \
    Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")

    #以下插入了 5 条数据
    cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

运行后,先在可视化界面中查看,

成功创建。

3.在python中使用select来获取mysql的数据并遍历

import pymysql as py
import sys
import getpass

pd = getpass.getpass("请输入root账户密码:")
#将 con 设定为全局连接
con = py.connect('localhost', 'root', pd, 'test');
with con:
    #获取连接的 cursor,只有获取了 cursor,我们才能进行各种操作
    cur = con.cursor()

    # 类似其他语言的query函数,execute是python中的执行查询函数
    cur.execute("SELECT * FROM Writers")

    # 使用fetchall函数,将结果集(多维元组)存入rows里面
    rows = cur.fetchall()

    # 依次遍历结果集,发现每个元素,也就是找到表中的一条记录,用一个元组来表示
    for row in rows:
        print(row)

输出结果:

可以看出,上面的代码,以元组的形式输出所有结果。如果我们希望取出单个数据呢?

import pymysql as py
import sys
import getpass

# pd = getpass.getpass("请输入root账户密码:")
#将 con 设定为全局连接
con = py.connect('localhost', 'root', 'root', 'test')

with con:
    #获取执行查询的对象
    cur = con.cursor()

    #执行那个查询,这里用的是 select 语句
    cur.execute("SELECT * FROM Writers")

    # 使用 cur.rowcount 获取结果集的条数
    numrows = int(cur.rowcount)
    # 循环 numrows 次,每次取出一行数据
    for i in range(numrows):
        # 每次取出一行,放到 row 中,这是一个元组(id,name)
        row = cur.fetchone()
        if i == 3:
            break
        # 直接输出两个元素
        print(row[0], row[1])

输出结果:

1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger

4.使用字典cursor取得结果集(可以使用表字段名字访问值)

import pymysql as py
import sys
import getpass

# pd = getpass.getpass("请输入root账户密码:")
# 获得 mysql 查询的链接对象
con = py.connect('localhost', 'root', 'root', 'test')

with con:
    # 获取连接上的字典 cursor,注意获取的方法,
    # 每一个 cursor 其实都是 cursor 的子类
    cur = con.cursor(py.cursors.DictCursor)
    # 执行语句不变
    cur.execute("SELECT * FROM Writers")
    # 获取数据方法不变
    rows = cur.fetchall()
    # 遍历数据也不变(比上一个更直接一点)
    for row in rows:
        # 这里,可以使用键值对的方法,由键名字来获取数据
        print("%s %s" % (row["Id"], row["Name"]))

输出结果:

1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote

 5.获取单个表的字段名和信息的方法

import pymysql as py
# 获得 mysql 查询的链接对象
con = py.connect('localhost', 'root', 'root', 'test')

with con:
    # 获取普通的查询 cursor
    cur = con.cursor()
    cur.execute("SELECT * FROM Writers")
    rows = cur.fetchall()
    # 获取连接对象的描述信息
    desc = cur.description
    print('cur.description:',desc)
    # 打印表头,就是字段名字
    print("%s %3s" % (desc[0][0], desc[1][0]))
    for row in rows:
        #打印结果
        print("%2s %3s" % row)

运行结果:

cur.description: (('Id', 3, None, 11, 11, 0, False), ('Name', 253, None, 100, 100, 0, True))
Id Name
 1 Jack London
 2 Honore de Balzac
 3 Lion Feuchtwanger
 4 Emile Zola
 5 Truman Capote

 6.使用 Prepared statements 执行查询(更安全方便)

import pymysql as py

con = py.connect('localhost', 'root', 'root', 'test')

with con:
    cur = con.cursor()

    cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
                ("Guy de Maupasant", "4"))

    print("Number of rows updated: %d" % cur.rowcount)

运行结果:

Number of rows updated: 1

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值