Python操作MySQL_NavCat笔记

Python&MySQL

一 介绍

1.1 数据库分类

blob:https://maxiang.io/bacaccb9-50a9-4601-aa90-641addde95d9

二 MySQL

2.1 语法

2.1.1 概览

在这里插入图片描述

2.1.2 增加数据

-- 插入多条数据
INSERT INTO `表名`(`字段名1`,`字段名2...) VALUES
                 (值1,值2...),
                 .....
                 (值1,值2...);

2.1.3 删除数据

 DELETE FROM `表名`; -- 删除表内容
 DELETE FROM `表名` WHERE 条件; --删除记录

2.1.4 更改数据

UPDATE `表名` 
SET `字段名1`=值1,`字段名2`=值2...

2.2 MySQLdb 模块

2.2.1 连接数据库

    def get_conn(self):
        try:
            self.conn = MySQLdb.connect(
                host='127.0.0.1',
                user='root',
                passwd='123456',
                db='news',
                port=3306,
                charset='utf8'
            )
        except MySQLdb.Error as e:
            print('Error:%s' % e)  # 输出字符串%s

2.2.2 关闭数据库

    def close_conn(self):
        try:
            if self.conn:
                self.conn.close()
        except MySQLdb.Error as e:
            print('Error: %s' % e)

2.2.3 查询数据

查询一条记录

    def get_one(self):
        sql = 'SELECT * FROM `news` WHERE `type`=%s;'  # 准备SQL
        cursor = self.conn.cursor()  # 找到cursor
        cursor.execute(sql, ('实时新闻',))  # 执行SQL。注意:当只有一个元素时,需要加上,
        rest = cursor.fetchone()  # 拿到一个结果
        rest = dict(zip([k[0] for k in cursor.description], rest))  # 处理数据
        cursor.close()  # 关闭cursor
        self.close_conn()  # 关闭连接
        return rest
	

查询多条记录


    def get_more(self):
        sql = 'SELECT * FROM `news` WHERE `view_count`=%s;'
        cursor = self.conn.cursor()
        cursor.execute(sql, (1,))
        rest = cursor.fetchall()  # 拿到全部结果
        rest = [dict(zip([k[0] for k in cursor.description], row)) for row in rest] 
        cursor.close()
        self.close_conn()
        return rest

2.2.4 增加数据

	# 增加一条数据
    def add_one(self):
        try:
            sql=(
                "INSERT INTO `news` (`title`,`content`,`type`,`image`,`author`,`is_valid`) VALUES"
                "(%s,%s,%s,%s,%s,%s);"
            )
            cursor=self.conn.cursor()
            cursor.execute(sql,('新闻标题','新闻内容','新闻类型','新闻路径','李丽',1))
            self.conn.commit()  # 提交事务
            cursor.close()
        except MySQLdb.Error as e:
            print('Error: %s' % e)
            self.conn.commit()  # 如果出错,正确的部分会提交
            # self.conn.rollback()  # 一旦出错,所有均不提交
        self.close_conn()

三 ORM

3.1 介绍

ORM,即对象关系映射,它的作用是在关系型数据库和业务实体对象之间作一个映射,使得在操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

优势:

  • 隐藏了数据访问细节,提高开发效率;
  • 构造固化数据结构变得简单易行

劣势:

  • 降低性能;
  • X-QL作为一种数据库与对象之间的过渡,增加了学习成本;
  • 不适合复杂查询

3.2 sqlalchemy 框架

SQLAlchemy是Python编程语言下的一款ORM框架

3.2.1 增加数据

    # 插入一条记录
    def add_one(self):
        new_obj = News(title='新闻n', content='内容')
        self.session.add(new_obj)
        self.session.commit()
        return new_obj

    # 插入多条记录
    def add_more(self):
        self.session.add_all([
            News(title='新闻666', content='内容3'),
            News(title='新闻der', content='内容3')
        ])
        self.session.commit()

3.2.2 删除数据

    def delete_data(self):
        data = self.session.query(News).get()  # 删除一条记录。删除多条可以参照查询多条记录的写法
        self.session.delete(data)
        self.session.commit()

3.2.3 更改数据

	# 修改一条记录
    def update_data_one(self, jk):
        data = self.session.query(News).get(jk)
        if data:
            data.is_valid = 1
            self.session.add(data)
            self.session.commit()
            return True
        else:
            print('不存在该记录,不可修改')
            return False

    # 修改多条记录
    def update_data_more(self):
        data_list = self.session.query(News).filter_by(title='新闻3')
        if data_list:
            for item in data_list:
                item.is_valid = 1
                self.session.add(item) # 注意:要把add()写在循环内
            self.session.commit()
            return True
        else:
            print('不存在该记录,不可修改')
            return False

3.2.4 查询数据

    # 查询一条记录
    def get_one(self, jk):
        data = self.session.query(News).get(jk)
        # data=self.session.query(News).filter_by(id=4).first()
        if data:
            print('ID:{0} , content:{1}'.format(data.id, data.title))
            return True
        else:
            print('记录不存在')
            return False

    # 查询多条记录
    def get_more(self):
        data_list = self.session.query(News).filter_by(title='新闻3')
        if data_list:
            print('总共查询的记录有:{0}'.format(data_list.count()) + '条')
            for item in data_list:
                print('ID:{0} , content:{1}'.format(item.id, item.title))
        else:
            print('不存在该记录')

四 Flask 框架

五 网易新闻demo

网易新闻demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章