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

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