• python与mysql的数据交互


    一 Python 中操作 MySQL 步骤

    1.1 安装pymysql命令

    sudo pip3 install pymysql
    
    安装软件:sudo apt-get install 软件名称
    
    安装模块:sudo pip3 install 模块名称

    1.2 通过pymysql操作数据库的步骤

    1.3 引入模块

    在py文件中引入pymysql模块
    
    from pymysql import *
    
    from pymasql import connect

    1.4 建立连接对象

    1.4.1 Connect 对象

    #用于建立与数据库的连接
    
    创建对象:调用connect()方法
    
    # conn = connect(参数列表)
    
    conn = connect(host="127.0.0.1", port=3306, user="root", password="mysql", database="jing_dong", charset="utf8")
    参数host:连接的mysql主机,如:本机是”localhost”或”127.0.0.1”
    
    参数port:连接的mysql主机的端口,默认是3306
    
    参数database:数据库的名称
    
    参数user:连接的用户名
    
    参数password:连接的密码
    
    参数charset:通信采用的编码方式,推荐使用utf8

    1.4.2 对象的方法

    conn.close()  # 关闭连接
    
    conn.commit()  # 提交
    
    conn.cursor()  # 返回Cursor游标对象,用于执行sql语句并获得结果

    1.5 创建游标对象
    1.5.1 Cursor对象

    用于执行sql语句,使用频度最高的语句为select、insert、update、delete
    
    获取Cursor对象:调用Connect对象的cursor()方法
    
    cs = conn.cursor()

    1.5.2 对象的方法

    cs.close() # 关闭
    
    # 执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句
    cs.execute(operation [, parameters ])
    
    # 执行SQL语句 业务代码 查询操作返回记录数
    count = cs.execute("select * from goods")
    
    # 获取查询结果集的下一行数据,返回一个元组
    cs.fetchone()
    
    # 获取多条查询结果集,返回是一个元组,默认返回1条
    cs.fetchmany(nums)
    
    # 获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
    cs.fetchall()

    1.6 对数据表的读操作

    # 导入模块
    from pymysql import *
    
    # 创建连接对象 连接数据库
    conn = connect(host="127.0.0.1", port=3306, user="root", password="mysql", database="jing_dong")
    # 创建cursor游标对象
    cs = conn.cursor()
    # 执行SQL语句 业务代码 查询操作返回记录数
    count = cs.execute("select * from goods")
    # 获取查询结果集的下一行数据,返回一个元组
    cs.fetchone()
    # 获取多条查询结果集,返回是一个元组,默认返回1条
    cs.fetchmany(nums)
    # 获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
    cs.fetchall()
    # 最近一次execute返回数据的行数或影响的行数
    print(cs.rowcount)
    # 使用完毕 先关闭游标
    cs.close()
    # 再关闭连接
    conn.close()

    二 增删改查
    2.1 增删改

    from pymysql import *
    
    def main():
    # 创建Connection连接
    conn = connect(host="localhost", port=3306, database="jing_dong", user="root", password="mysql", charset="utf8")
    # 获得Cursor对象
    cs1 = conn.cursor()
    
    # 执行insert语句,并返回受影响的行数:添加一条数据
    # 增加
    count = cs1.execute("insert into goods_cates(name) values('硬盘')")
    # 打印受影响的行数
    print("受影响的行数:%d" % count)
    
    # # 更新
    # count = cs1.execute("update goods_cates set name='机械硬盘' where name='硬盘'")
    
    # # 删除
    # count = cs1.execute("delete from goods_cates where id=6")
    
    # 提交之前的操作,如果之前已经之执行过多次的execute,那么就都进行提交
    conn.commit()
    
    # 关闭Cursor对象
    cs1.close()
    # 关闭Connection对象
    conn.close()
    
    if __name__ == "__main__":
    main()

    2.2 查询一行数据

    from pymysql import *
    
    def main():
    # 创建Connection连接
    conn = connect(host="localhost", port=3306, user="root", password="mysql", database="jing_dong", charset="utf8")
    # 获得Cursor对象
    cs = conn.cursor()
    
    # 执行select语句,并返回受影响的行数:查询一条数据
    count = cs.execute("select id, name from goods where id>=4")
    # 打印受影响的行数
    print("查询到%d条数据:" % count)
    
    for i in range(count):
    # 获取查询的结果
    result = cs.fetchone()
    # 打印查询的结果
    print(result)
    # 获取查询的结果
    
    # 关闭Cursor对象
    cs.close()
    # 关闭Connection对象
    conn.close()
    
    
    if __name__ == "__main__":
    main()

    2.3 查询多行数据

    from pymysql import *
    
    
    def main():
    # 创建Connection连接
    conn = connect(host="localhost", port=3306, user="root", password="mysql", database="jing_dong", charset="utf8")
    # 获得Cursor对象
    cs = conn.cursor()
    
    # 执行select语句,并返回受影响的行数:查询一条数据
    count = cs.execute("select id,name from goods where id>=4")
    # 打印受影响的行数
    print("查询到%d条数据:" % count)
    
    result = cs.fetchall()
    print(result)
    
    # 关闭Cursor对象
    cs.close()
    # 关闭Connection对象
    conn.close()
    
    
    if __name__ == "__main__":
    main()

    2.4 用面向对象的思想来实现

    from pymysql import *
    
    class JD(object):
    def __init__(self):
    # 创建Connection连接
    self.conn = connect(host="127.0.0.1", port=3306, user="root", password="mysql", database="jing_dong",
    charset="utf8")
    # 获得Cursor对象
    self.cursor = self.conn.cursor()
    
    def __del__(self):
    # 关闭Cursor对象, 当程序结束时 python 解释器会自动调用此方法
    self.cursor.close()
    self.conn.close()
    
    def execute_sql(self, sql):
    self.cursor.execute(sql)
    for temp in self.cursor.fetchall():
    print(temp)
    
    def show_all_items(self):
    """显示所有的商品"""
    sql = "select * from goods;"
    self.execute_sql(sql)
    
    def show_cates(self):
    """显示所有的商品"""
    sql = "select name from goods_cates;"
    self.execute_sql(sql)
    
    def show_brands(self):
    """显示所有的商品"""
    sql = "select name from goods_brands;"
    self.execute_sql(sql)
    
    @staticmethod
    def print_menu():
    print("-----京东------")
    print("1:所有的商品")
    print("2:所有的商品分类")
    print("3:所有的商品品牌分类")
    num = input("请输入功能对应的序号:")
    return num
    
    def run(self):
    while True:
    num = JD.print_menu()
    if num == "1":
    # 查询所有商品
    self.show_all_items()
    elif num == "2":
    # 查询分类
    self.show_cates()
    elif num == "3":
    # 商品品牌分类
    self.show_brands()
    else:
    print("输入有误,重新输入...")
    
    
    def main():
    jd = JD()
    jd.run()
    
    
    if __name__ == "__main__":
    main()

    2.5 添加一个商品分类

    from pymysql import *
    
    
    class JD(object):
    def __init__(self):
    # 创建Connection连接
    self.conn = connect(host='127.0.0.1', port=3306, user='root', password='mysql', database='jing_dong',
    charset='utf8')
    # 获得Cursor对象
    self.cursor = self.conn.cursor()
    
    def __del__(self):
    # 关闭Cursor对象, 当程序结束时 python 解释器会自动调用此方法
    self.cursor.close()
    self.conn.close()
    
    def execute_sql(self, sql):
    self.cursor.execute(sql)
    for temp in self.cursor.fetchall():
    print(temp)
    
    def show_all_items(self):
    """显示所有的商品"""
    sql = "select * from goods;"
    self.execute_sql(sql)
    
    def show_cates(self):
    """显示所有的商品"""
    sql = "select name from goods_cates;"
    self.execute_sql(sql)
    
    def show_brands(self):
    """显示所有的商品"""
    sql = "select name from goods_brands;"
    self.execute_sql(sql)
    
    def add_brands(self):
    item_name = input("输入新商品分类的名称:")
    sql = """insert into goods_brands (name) values ("%s")""" % item_name
    self.cursor.execute(sql)
    self.conn.commit()
    
    @staticmethod
    def print_menu():
    print("-----京东------")
    print("1:所有的商品")
    print("2:所有的商品分类")
    print("3:所有的商品品牌分类")
    print("4:添加一个商品分类")
    num = input("请输入功能对应的序号:")
    return num
    
    def run(self):
    while True:
    num = JD.print_menu()
    if num == "1":
    # 查询所有商品
    self.show_all_items()
    elif num == "2":
    # 查询分类
    self.show_cates()
    elif num == "3":
    # 商品品牌分类
    self.show_brands()
    elif num == "4":
    # 商品品牌分类
    self.add_brands()
    else:
    print("输入有误,重新输入...")
    
    
    def main():
    jd = JD()
    jd.run()
    
    
    if __name__ == '__main__':
    main()

    2.6 根据商品名称查询信息

    from pymysql import *
    
    
    class JD(object):
    def __init__(self):
    # 创建Connection连接
    self.conn = connect(host='127.0.0.1', port=3306, user='root', password='mysql', database='jing_dong',
    charset='utf8')
    # 获得Cursor对象
    self.cursor = self.conn.cursor()
    
    def __del__(self):
    # 关闭Cursor对象, 当程序结束时 python 解释器会自动调用此方法
    self.cursor.close()
    self.conn.close()
    
    def execute_sql(self, sql):
    self.cursor.execute(sql)
    for temp in self.cursor.fetchall():
    print(temp)
    
    def show_all_items(self):
    """显示所有的商品"""
    sql = "select * from goods;"
    self.execute_sql(sql)
    
    def show_cates(self):
    """显示所有的商品"""
    sql = "select name from goods_cates;"
    self.execute_sql(sql)
    
    def show_brands(self):
    """显示所有的商品"""
    sql = "select name from goods_brands;"
    self.execute_sql(sql)
    
    def add_brands(self):
    item_name = input("输入新商品分类的名称:")
    sql = """insert into goods_brands (name) values ("%s")""" % item_name
    self.cursor.execute(sql)
    self.conn.commit()
    
    def get_info_by_name(self):
    find_name = input("请输入要查询的商品的名字:")
    
    # 对 find_name 进行 判断,验证。
    
    sql = """select * from goods where name='%s';""" % find_name
    
    """
    find_name = ' or 1=1 '; insert into goods ..... ;or '
    find_name = 老王牌电脑
    select * from goods where name='' or 1=1 or '';
    """
    
    print("---->%s<----" % sql)
    self.execute_sql(sql)
    
    @staticmethod
    def print_menu():
    print("-----京东------")
    print("1:所有的商品")
    print("2:所有的商品分类")
    print("3:所有的商品品牌分类")
    print("4:添加一个商品分类")
    print("5:根据名字查询一个商品")
    num = input("请输入功能对应的序号:")
    return num
    
    def run(self):
    while True:
    num = JD.print_menu()
    if num == "1":
    # 查询所有商品
    self.show_all_items()
    elif num == "2":
    # 查询分类
    self.show_cates()
    elif num == "3":
    # 商品品牌分类
    self.show_brands()
    elif num == "4":
    # 添加品牌分类
    self.add_brands()
    elif num == "5":
    # 根据名字查询商品
    self.get_info_by_name()
    else:
    print("输入有误,重新输入...")
    
    
    def main():
    jd = JD()
    jd.run()
    
    
    if __name__ == '__main__':
    main()

    3 防止SQL注入——参数化
    sql语句的参数化,可以有效防止sql注入
    注意:此处不同于python的字符串格式化,全部使用%s占位 

    from pymysql import *
    
    
    class JD(object):
    def __init__(self):
    # 创建Connection连接
    self.conn = connect(host='127.0.0.1', port=3306, user='root', password='mysql', database='jing_dong',
    charset='utf8')
    # 获得Cursor对象
    self.cursor = self.conn.cursor()
    
    def __del__(self):
    # 关闭Cursor对象, 当程序结束时 python 解释器会自动调用此方法
    self.cursor.close()
    self.conn.close()
    
    def execute_sql(self, sql):
    self.cursor.execute(sql)
    for temp in self.cursor.fetchall():
    print(temp)
    
    def show_all_items(self):
    """显示所有的商品"""
    sql = "select * from goods;"
    self.execute_sql(sql)
    
    def show_cates(self):
    """显示所有的商品"""
    sql = "select name from goods_cates;"
    self.execute_sql(sql)
    
    def show_brands(self):
    """显示所有的商品"""
    sql = "select name from goods_brands;"
    self.execute_sql(sql)
    
    def add_brands(self):
    item_name = input("输入新商品分类的名称:")
    sql = """insert into goods_brands (name) values ("%s")""" % item_name
    self.cursor.execute(sql)
    self.conn.commit()
    
    def get_info_by_name(self):
    find_name = input("请输入要查询的商品的名字:")
    # sql = """select * from goods where name='%s';""" % find_name
    # print("---->%s<----" % sql)
    # self.execute_sql(sql)
    sql = "select * from goods where name=%s"
    self.cursor.execute(sql, [find_name])
    print(self.cursor.fetchall())
    
    @staticmethod
    def print_menu():
    print("-----京东------")
    print("1:所有的商品")
    print("2:所有的商品分类")
    print("3:所有的商品品牌分类")
    print("4:添加一个商品分类")
    print("5:根据名字查询一个商品")
    num = input("请输入功能对应的序号:")
    return num
    
    def run(self):
    while True:
    num = JD.print_menu()
    if num == "1":
    # 查询所有商品
    self.show_all_items()
    elif num == "2":
    # 查询分类
    self.show_cates()
    elif num == "3":
    # 商品品牌分类
    self.show_brands()
    elif num == "4":
    # 添加品牌分类
    self.add_brands()
    elif num == "5":
    # 根据名字查询商品
    self.get_info_by_name()
    else:
    print("输入有误,重新输入...")
    
    
    def main():
    jd = JD()
    jd.run()
    
    
    if __name__ == '__main__':
    main()
  • 相关阅读:
    R语言学习——数据框
    R语言学习——数组
    R语言学习——矩阵
    R语言学习——向量
    SSM的项目结构
    simple-spring-memcached简介
    Arrays
    AbstractCollection 类
    Collections 类
    Map接口
  • 原文地址:https://www.cnblogs.com/daofaziran/p/10124538.html
Copyright © 2020-2023  润新知