• Python 笔记07(Mysql数据库基本操作)


    一 数据插入

    1.1 创建数据列

    1.1.1 选择数据库

    USE test_data;

    1.1.2 插入数据列

    1. ALTER TABLE test_data_info
    2. ADD COLUMN stuno INT,
    3. ADD COLUMN stuname VARCHAR(255),
    4. ADD COLUMN gender VARCHAR(10);

    1.2 插入具体数据

    1. import MySQLdb
    2. # 创建数据库连接 # 主机IP:192.168.146.1,本机可以使用local_host
    3. conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', password='root', db='test_data')
    4. # print('conn:', conn)
    5. # 获取游标对象
    6. cursor = conn.cursor() # cursor 游标
    7. sql = 'insert into test_data_info(stuno, stuname, gender) values(%s,%s,%s)'
    8. try:
    9. result = cursor.execute(sql, args=(1042, 'rose', 'girl')) # 增,删,改,需要提交 # execute,执行
    10. print('result:', result)
    11. conn.commit() # 提交 # commit
    12. except Exception as ex:
    13. print(ex)
    14. conn.rollback() # 记得回滚

    1.3 查询数据

    1.3.1 查询多条数据

    1. sql = 'select * from test_data_info'
    2. cursor.execute(sql)
    3. result = cursor.fetchall()
    4. print('result:', result)

    1.3.2 查询单条数据

    1. sql = 'select count(*) from test_data_info'
    2. cursor.execute(sql)
    3. result = cursor.fetchone()
    4. print('result:', result)

    1.4 命令行操作

    1.4.1 命令行操作

    Windows + r   -> cmd

    1.4.2 登录MySQL

    mysql -h127.0.0.1 -uroot -proot

    1.4.3 选择数据库

    use test_data

    1.4.4 查看存在的表格

    show tables;

    1.4.5 查看具体表格

    select * from test_data_info;

    1.4.6 插入数据

    insert into test_data_info(stuno, stuname, gender) values (1043, 'mark', 'boy');

    二 数据库内容修改

    2.1 配置文件一

    1. class DBConfig:
    2. db_host = '127.0.0.1'
    3. db_port = 3306
    4. db_user = 'root'
    5. db_password = 'root'
    6. db_database = 'test_data'

    2.2 配置文件二

    1. import MySQLdb
    2. class MySQLClientUtils(object):
    3. def __init__(self, config):
    4. self.host = config.db_host
    5. self.port = config.db_port
    6. self.user = config.db_user
    7. self.pwd = config.db_password
    8. self.db = config.db_database
    9. self.conn = None
    10. self.cursor = None
    11. # 创建链接
    12. def create_connection(self):
    13. self.conn = MySQLdb.connect(host=self.host, port=self.port, user=self.user, password=self.pwd, db=self.db)
    14. # 获取游标对象
    15. def create_cursor(self):
    16. self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
    17. # 关闭
    18. def close(self):
    19. if self.cursor:
    20. self.cursor.close()
    21. if self.conn:
    22. self.conn.close()
    23. # 关于数据库的操作, 增删改查, insert, delete, update,
    24. def dml_operation(self, sql, args=None):
    25. try:
    26. # 获取连接对象
    27. self.create_connection()
    28. # 获取游标
    29. self.create_cursor()
    30. # 执行sql语句
    31. result = self.cursor.execute(sql, args=args) # 执行sql语句并传参
    32. # 提交
    33. self.conn.commit()
    34. return result
    35. except Exception as ex:
    36. print('ex: ', ex)
    37. self.conn.rollback()
    38. finally:
    39. self.close() # 正常结束,调用关闭操作
    40. # 查询操作
    41. def search_operation(self, sql, args=None, is_one=True):
    42. try:
    43. # 创建链接
    44. self.create_connection()
    45. # 获取cursor
    46. self.create_cursor()
    47. # 执行sql语句
    48. self.cursor.execute(sql, args=args)
    49. if is_one:
    50. result = self.cursor.fetchone() # 查询一个结果
    51. else:
    52. result = self.cursor.fetchall() #
    53. return result # 返回查询结果
    54. except Exception as ex:
    55. print('ex: ', ex)
    56. finally:
    57. self.close() # 关闭

    2.3 插入数据

    2.3.1 插入数据

    1. sql1 = 'insert into test_data_info(stuno, stuname, gender) values(%s,%s,%s)'
    2. # 创建对象
    3. client_utils = MySQLClientUtils(DBConfig)
    4. result = client_utils.dml_operation(sql1, args=(1048, '张三', 'boy'))
    5. print(result)

    2.3.2 修改数据

    1. from settings import DBConfig
    2. from mysql_utils import MySQLClientUtils
    3. sql2 = 'update test_data_info set stuname=%s where stuno=%s'
    4. # 创建对象
    5. client_utils = MySQLClientUtils(DBConfig)
    6. result = client_utils.dml_operation(sql2, args=('张小亮', 1048))
    7. print(result)

    2.3.3 修改数据

    1. sql3 = 'delete from test_data_info where stuno=%s'
    2. # 创建对象
    3. client_utils = MySQLClientUtils(DBConfig)
    4. result = client_utils.dml_operation(sql3, args=(1048, ))
    5. print(result)

    2.3.4 查询数据

    1. sql4 = 'select count(*) from test_data_info'
    2. # 创建对象
    3. client_utils = MySQLClientUtils(DBConfig)
    4. result = client_utils.search_operation(sql4)
    5. print(result)

    2.3.5 模糊查询

    1. sql5 = 'select * from test_data_info where stuname like %s'
    2. # 创建对象
    3. client_utils = MySQLClientUtils(DBConfig)
    4. result = client_utils.search_operation(sql5, args=('%ma%', ), is_one=False)
    5. print(result)

    三 实际项目数据库操作

    3.1 进入主界面

    1. from settings import DBConfig
    2. from mysql_utils import MySQLClientUtils
    3. import prettytable as pt
    4. # 面向过程
    5. def menu():
    6. while True:
    7. print('-' * 50, '欢迎来到购物商城', '-' * 50)
    8. print('1.查询全部商品 2.根据商品名称查询 3.根据编号查询 4.新增商品进购物车 5.清空购物车 6.删除购物车中指定商品 '
    9. '7.查询购物车 0.退出系统')
    10. print('-'*120)
    11. choice = eval(input('请选择:'))
    12. if choice == 1:
    13. # 调用查询方法
    14. result = search_all()
    15. show(result)
    16. elif choice == 2:
    17. goods_name = input('请输入要查询的商品名称【支持模糊查询】:')
    18. # 调用本模块中根据商品名称查询的方法
    19. result = search_by_name(goods_name)
    20. show(result)
    21. elif choice == 3:
    22. goods_id = eval(input('请输入要查询的商品编号:'))
    23. # 调用本模块中根据商品名称查询的方法
    24. result = search_by_id(goods_id)
    25. show(result)
    26. elif choice == 4:
    27. goods_id = eval(input('请输入想要购买的商品编号: '))
    28. result = search_by_id(goods_id)[0]
    29. print('result:', result)
    30. # result: ({'id': '51.0', 'name': '项目驱动零起点学Java 百万程序员Java学习经验总结', 'price': '49.0'},)
    31. goods_name = result.get('name')
    32. price = result.get('price')
    33. num = eval(input('请输入要购买的数量:'))
    34. # 调用本模块的添加进购物车的方法
    35. insert_result = add_cart(goods_id, goods_name, price, num)
    36. if insert_result > 0:
    37. print('商品已经添加到购物车!')
    38. else:
    39. print('添加失败')
    40. elif choice == 5:
    41. # 清空购物车
    42. result = clear_cart()
    43. if result > 0:
    44. print('成功清空购物车')
    45. else:
    46. print('购物车中无商品!')
    47. elif choice == 6:
    48. """6.删除购物车中指定商品"""
    49. goods_id = eval(input('请输入要删除的商品编号: '))
    50. result = delete_goods_in_cart(goods_id)
    51. print('result:', result)
    52. if result > 0:
    53. print('删除购物车商品成功')
    54. else:
    55. print('购物车中无商品')
    56. elif choice == 7:
    57. """7.查询购物车"""
    58. result = search_cart()
    59. show_cart(result)
    60. elif choice == 0:
    61. print('谢谢使用 !')
    62. break
    63. else:
    64. print('输入错误,重新选择')
    65. if __name__ == '__main__':
    66. menu()

    3.2  查询全部商品

    sql = 'select * from yanxuan'

    1. def search_all():
    2. """查询全部商品"""
    3. sql = 'select * from yanxuan'
    4. # 调用数据库查询
    5. result = MySQLClientUtils(config=DBConfig).search_operation(sql, is_one=False)
    6. return result
    7. def show(result):
    8. """数据显示"""
    9. tb = pt.PrettyTable()
    10. tb.field_names = ['编号', '商品名称', '售价']
    11. for item in result:
    12. id = item.get('id')
    13. name = item.get('name')
    14. price = item.get('price')
    15. lst = [id, name, price]
    16. tb.add_row(lst) # 添加到表格中
    17. print('tb:', tb)

    3.3 根据商品名称查询

    sql = 'select * from yanxuan where name like %s'

    1. def search_by_name(goods_name):
    2. sql = 'select * from yanxuan where name like %s'
    3. # 调用数据库查询
    4. result = MySQLClientUtils(config=DBConfig).search_operation(sql, args=(f'%{goods_name}%',), is_one=False)
    5. return result

    3.4 根据编号查询

    sql = 'select * from yanxuan where id = %s'

    1. def search_by_id(goods_id):
    2. sql = 'select * from yanxuan where id = %s'
    3. # 调用数据库查询
    4. result = MySQLClientUtils(config=DBConfig).search_operation(sql, args=(goods_id,), is_one=False)
    5. return result

    sql = 'insert into cart (goods_id, name, price, num) value (%s, %s, %s, %s)'

    1. def add_cart(id, goods_name, price, num):
    2. sql = 'insert into cart (goods_id, name, price, num) value (%s, %s, %s, %s)'
    3. result = MySQLClientUtils(config=DBConfig).dml_operation(sql, args=(id, goods_name, price, num))
    4. return result

    3.5 清空购物车

    sql = 'delete from cart'

    1. def clear_cart():
    2. """清空购物车"""
    3. sql = 'delete from cart'
    4. result = MySQLClientUtils(config=DBConfig).dml_operation(sql)
    5. return result

    3.6 删除购物车指定商品

    sql = 'delete from cart where goods_id=%s'

    1. def delete_goods_in_cart(goods_id):
    2. """删除购物车指定商品"""
    3. sql = 'delete from cart where goods_id=%s'
    4. result = MySQLClientUtils(config=DBConfig).dml_operation(sql, args=(goods_id, ))
    5. return result

    3.7 查询购物车所有商品

    sql = 'select * from cart'

    1. def search_cart():
    2. """查询购物车所有商品"""
    3. sql = 'select * from cart'
    4. result = MySQLClientUtils(config=DBConfig).search_operation(sql, is_one=False)
    5. return result

    显示购物车商品

    1. def show_cart(result):
    2. tb = pt.PrettyTable()
    3. tb.field_names = ['序号', '商品编号', '商品名称', '售价', '数量']
    4. for item in result:
    5. id = item.get('id')
    6. goods_id = item.get('goods_id')
    7. name = item.get('name')
    8. price = item.get('price')
    9. num = item.get('num')
    10. lst = [id, goods_id, name, price, num]
    11. tb.add_row(lst)
    12. print(tb)

  • 相关阅读:
    复习单片机:直流电机(内含1 直流电机介绍+2 ULN2003 芯片介绍+3 硬件设计+4 软件设计+5原始代码+6. 实验现象)
    【算法题】714. 买卖股票的最佳时机含手续费
    解决虚拟机centos8无法连接外网,ping: www.baidu.com: 未知的名称或服务
    U++学习笔记 ------ 多播委托
    【ACM学习】【STL】多重集合multiset和多重映射multimap
    什么是微服务?与分布式又有什么区别?
    贪心算法——活动安排问题
    【设计模式】26.结构型模式-代理模式(Proxy)
    Nmap抓包分析与绕过Windows防火墙
    二叉搜索树详解以及C++实现二叉搜索树(递归和非递归)
  • 原文地址:https://blog.csdn.net/March_A/article/details/133466589