Python通過SQLAlchemy-SQL_Expression來訪問操作MySQL資料庫

2020-08-28 清楓Jason

前言

Python支持通過多種方式訪問MySQL資料庫。可能有些剛入門的朋友們對Python訪問MySQL資料庫還不是很熟悉,故計劃對Python訪問MySQL資料庫的這幾種方式分別作一介紹。

本系列中已經對 &34; 進行了介紹。

本系列中已經對 &34; 進行了介紹。

本系列中已經對 &34; 進行了介紹。

本系列中已經對 「Python通過SQLAlchemy-Raw_SQL來訪問操作MySQL資料庫」 進行了介紹。

本文是本系列的第五篇,對 「Python通過SQLAlchemy-SQL_Expression來訪問操作MySQL資料庫」 進行介紹。

本文以Windows平臺上開發為例進行講解,相關基本開發環境為:(1) Windows 7 (64位);(2) MySQL v8.0.21;(3) Python v3.8.5;(4) PyMySQL v0.10.0;( 5) SQLAlchemy v1.3.18


本次分享的內容目錄如下:

前言

SQLAlchemy 介紹

SQLAlchemy 安裝

Python通過SQLAlchemy訪問資料庫的方式

SQLAlchemy-SQL_Expression方式介紹

SQLAlchemy-SQL_Expression示例代碼

結束語



1. SQLAlchemy 介紹

1.1 SQLAlchemy簡介

SQLAlchemy的SQL工具包及對象關係映射器是一組用於處理Python訪問操作資料庫的綜合工具。它具有幾個不同的功能區域,可以單獨使用或組合使用。其主要組件如下圖所示,組件依存關係分為多個層:

SQLAlchemy「採用簡單的Python語言,為高效和高性能的資料庫訪問設計,實現了完整的企業級持久模型」。SQLAlchemy的理念是,SQL資料庫的量級和性能重要於對象集合;而對象集合的抽象又重要於表和行。因此,SQLAlchemy採用了類似於Java裡Hibernate的數據映射模型,而不是其他ORM框架採用的Active Record模型。不過,Elixir和declarative等可選插件可以讓用戶使用聲明語法。

SQLAlchemy是Python程式語言下的一款開源軟體,使用MIT許可證發行。SQLAlchemy首次發行於2006年2月,並迅速地在Python社區中最廣泛使用的ORM工具之一,不亞於Django的ORM框架。


SQLAlchemy資源信息如下:

(1) SQLAlchemy官網主頁:https://www.sqlalchemy.org/

(2) SQLAlchemy官網文檔:https://docs.sqlalchemy.org/en/13/

(3) SQLAlchemy項目(PyPI):https://pypi.org/project/SQLAlchemy

(4) SQLAlchemy最新版本:1.3.18(2020年6月26日)

1.2 dialect簡介

dialectSQLAlchemy用於和DBAPI進行通信,根據配置文件的不同調用不同的DBAPI,進而實現對資料庫的操作。

注意:所有的dialect都需要安裝適用的DBAPI驅動,否則會一直連接不上資料庫。

本文主要是講解通過SQLAlchemy來訪問操作MySQL資料庫的,所以下面只介紹跟MySQL相關的部分。

SQLAlchemy支持MySQL從4.1版本到最新版本。SQLAlchemy支持MySQL資料庫的dialect/DBAPI選項主要如下表:


2. SQLAlchemy 安裝

2.1 MySQL下載安裝

省略,詳見中對應章節(第2.1章節)內容。

2.2 Python下載安裝

省略,詳見中對應章節(第2.2章節)內容。

2.3 PyMySQL下載安裝

省略,詳見中對應章節(第2.3章節)內容。

2.4 SQLAlchemy下載安裝

省略,詳見中對應章節(第2.4章節)內容。



3. Python通過SQLAlchemy訪問資料庫的方式

本文第1章有介紹過SQLAlchemy不同的功能區域可以單獨使用或組合使用,因此目前Python可以通過以下三種SQLAlchemy方式來訪問資料庫:

(1) SQLAlchemy-Row_SQL方式

(2) SQLAlchemy-SQL_Expression方式

(3) SQLAlchemy-ORM方式

這三種方式的簡單對比分析如下表所示:

本文限於篇幅,只介紹第(2)種SQLAlchemy-SQL_Expression方式。



4. SQLAlchemy-SQL_Expression方式介紹

4.1 SQLAlchemy-SQL_Expression方式的執行流程

Python通過SQLAlchemy-SQL_Expression訪問操作MySQL資料庫的完整執行流程如下:

– (1) 導入SQLAlchemy模塊

– (2) 創建引擎(含定義資料庫連接路徑)

– (3) 定義數據表(通過MetaData類和Table類)

– (4.1) 創建/刪除數據表

-- (4.2) 構造SQL Expression(通過 SQLAlchemy Core 轉換成SQL語句)

-- (5) 創建連接(通過創建好的引擎在連接池中建立起真正的資料庫連接)

-- (6) 執行SQL語句(基於連接使用dialect調用DBAPI,然後將SQL語句交給它去執行)


4.2 相關方法介紹

一、導入SQLAlchemy

在Python中導入sqlalchemy模塊:

import sqlalchemy

在實際編碼時,為簡化代碼,一般不直接使用import sqlalchemy,而是使用sqlalchemy模塊中直接用到的相關部分,參考如下:

from sqlalchemy import create_engine......

二、定義連接路徑

要連接資料庫,需要一個連接路徑,連接路徑格式如下:

<dialect>+<driver>://<username>:<password>@<host:port>/<database>[?<options>]

如:定義一個通過dialect/DBAPI選項(PyMySQL驅動程序)到MySQL資料庫(資料庫名mydb,資料庫用戶名myuser,資料庫密碼mypasswd,資料庫主機名127.0.0.1,資料庫主機埠號3306)的連接路徑,則其示例代碼參考如下:

三、創建引擎

Engine是任何SQLAlchemy應用程式的起點。它通過連接池Dialect傳遞信息給SQLAlchemy應用程式,它描述了如何與特定類型的資料庫/DBAPI組合進行通信。

引擎的總體架構圖示如下:

有了連接路徑以後,創建引擎只需要發出一個調用 create_engine()即可:

from sqlalchemy import create_engine······myengine = create_engine(DB_URL, max_overflow=10, echo=False)

create_engine()說明:

——create_engine()方法通過Dialect創建了一個資料庫引擎對象(此時尚未真正連接MySQL資料庫)。僅在首次調用Engine.connect()Engine.execute()方法時,Pool對象才會在127.0.0.1:3306上真正建立一個DBAPI的資料庫連接。

——參數DB_URL:資料庫連接路徑

——參數max_overflow:表示設置連接池中連接數目, 默認為10;

——參數echo :表示列印轉換後的每條SQL語句,方便調試,生產環境下可以設置為 False。


四、定義數據表

定義數據表的本質就是建立SQLAlchemy與數據表的映射關係。如果想通過`SQLAlchemy-SQL_Expression方式訪問操作MySQL資料庫,不管當前資料庫中是否已經存在數據表,都需要先行定義好了數據表,才能進行後續SQL Expression的操作。如果不定義數據表,就無法建立起映射關係,SQL Expression就不知道是附加在哪個數據表上的操作。

SQLAlchemy通過MetaData類和Table類構造函數來定義數據表(類似於常規的CREATE TABLE的SQL語句)。定義數據表時,注意在「代碼和資料庫」中的」表名和欄位名」必須保持一致。

在大多數情況下,SQL Expression Language都會根據數據表中的欄位來構造其表達式。在SQLAlchemy中,一個Column對象表示一個欄位,每一個Column對象都會跟一個Table對象相關聯。Table對象及其子對象的集合稱為database metadataMetaData對象可以認為是記錄Table對象的目錄。MetaData對象、Table對象以及Column對象之間的關係如下圖所示:

定義數據表mytable示例代碼如下:

在定義好數據表後就能創建數據表了。


五、創建/刪除數據表

定義好了數據表後,就可以通過Metadata類的create_all()方法來創建數據表了(可以同時創建多個數據表,取決於之前已經定義的數據表)。

刪除所有已定義的數據表,如果數據表存在,則忽視metadata.drop_all(myengine)


六、構造SQL Expression

SQLAlchemy-Core可以對常見的增刪改查操作進行構造SQL Expression,簡單示例如下:


七、創建連接

有了引擎以後,可以通過引擎的connect()方法來創建一個連接對象(此時才真正連接到MySQL資料庫)

 myconn = myengine.connect()


八、執行SQL(增刪改查操作)

建立起真正的資料庫連接後,就可以通過 Connection對象的execute()方法來執行SQL(增刪改查操作)了。並返回一個ResultProxy對象(類似於DBAPI Cursor對象)。

 myresult = myconn.execute(sql_statement)



5. SQLAlchemy-SQL_Expression 示例代碼

下面針對Python通過SQLAlchemy-SQL_Expression方式訪問MySQL資料庫常見的操作(如:連接資料庫、創建資料庫、刪除資料庫、創建數據表、刪除數據表、插入數據記錄、刪除數據記錄、修改數據記錄、查詢數據記錄等)分別給出一個較為完整的入門示例(含詳細代碼注釋)。

注1:連接資料庫、創建資料庫、刪除資料庫的示例代碼跟上一篇的Python通過SQLAlchemy-Raw_SQL訪問MySQL資料庫中的一樣。

注2:創建數據表、刪除數據表、插入數據記錄、刪除數據記錄、修改數據記錄、查詢數據記錄是採用SQLAlchemy-SQL_Expression方式來完成的,請重點關注差異之處。

注3:本示例代碼使用的dialect/DBAPI選項是PyMySQL,所以必須提前安裝好PyMySQL驅動(可通過命令pip install pymysql完成安裝),否則會一直連接不上MySQL資料庫。如果想使用dialect/DBAPI選項是mysqlclient,則請提前安裝好MySQLdb驅動(可通過命令pip install mysqlclient完成安裝)。

5.1 創建資料庫連接示例

5.2 創建資料庫示例

注意:在通過create_engine()方法創建引擎時,參數DB_URL中包含的資料庫名DB_NAME必須實際存在,否則後續無法真正連接MySQL資料庫。因此在通過SQLAlchemy創建一個新的MySQL資料庫時,可以採用創建引擎時參數DB_URL中包含的資料庫名DB_NAME為已經存在一個資料庫名,而在創建資料庫SQL語句裡給的是待新創建的資料庫名DB_NEW_NAME

5.3 刪除資料庫示例

5.4 創建數據表示例

5.5 刪除數據表示例

5.6 插入數據記錄示例

5.7 批量插入數據記錄示例

5.8 刪除數據記錄示例

5.9 修改數據記錄示例

5.10 查詢數據記錄示例

根據讀取數據的多少,應採用不同的方法:

-- (1) 如果讀取全部數據,使用fetchall() 方法。

-- (2) 如果讀取多條數據,使用fetchmany(n) 方法。

-- (3) 如果讀取一條數據,使用fetchone()方法。



結束語

通過上面的介紹,相信感興趣的朋友們已經對Python通過SQLAlchemy-SQL_Expression方式來訪問操作MySQL資料庫有了一個基本的入門了解了。想掌握更多詳細內容,請查看SQAlchemy官網文檔(https://docs.sqlalchemy.org/en/13/index.html)。

本系列下一篇文章將針對 「Python通過SQLAlchemy-ORM」訪問操作MySQL資料庫進行介紹,敬請關注後續文章!

本文為原創,如果文章對您有所幫助,喜歡的話就點個讚加關注支持一下哈:)

相關焦點

  • Python通過"SQLAlchemy-Raw_SQL"方式來訪問操作MySQL資料庫
    本文是本系列的第四篇,對 「Python通過SQLAlchemy-Raw_SQL方式來訪問操作MySQL資料庫」 進行介紹。注意:所有的dialect都需要安裝適用的DBAPI驅動,否則會一直連接不上資料庫。本文主要是講解通過SQLAlchemy方式來訪問操作MySQL資料庫的,所以下面只介紹跟MySQL相關的部分。
  • Python通過SQLAlchemy-ORM訪問操作MySQL資料庫
    中已經對 「Python通過SQLAlchemy-Raw_SQL來訪問操作MySQL資料庫」 進行了介紹。中已經對 「Python通過SQLAlchemy-SQL_Expression來訪問操作MySQL資料庫」 進行了介紹。
  • Python資料庫ORM工具sqlalchemy的學習筆記
    SQLAlchemy是python的一個資料庫ORM工具,提供了強大的對象模型間的轉換,可以滿足絕大多數資料庫操作的需求,並且支持多種資料庫引擎(sqlite,mysql,postgres, mongodb等),在這裡記錄基本用法和學習筆記
  • python的mysql資料庫操作
    前言上一篇文章我們一起學習了MySQLdb模塊的安裝和資料庫連接,連接了資料庫以後就可以執行資料庫的各種語句了,今天我們再接著學習資料庫的sql語句操作。python的mysql資料庫執行sql語句1.獲取mysql版本#!
  • SQLAlchemy基礎入門
    它提供了一套完整的眾所周知的企業級持久性模式,專為高效和高性能的資料庫訪問而設計,適用於一種簡單的python域語言。>>> importsqlalchemy>>> sqlalchemy.
  • 一個簡單的Python訪問Mysql資料庫例子
    2020/11/3操作記錄搭建好Python的數據環境之後,接下來就是在Python代碼中訪問資料庫我先在Navicat圖形化界面創建一個資料庫命名為pythontest,再在資料庫中創建了一個表studentinfo有nid,nname,ngrade,nage四個欄位,nid為主鍵遞增
  • 學好ORM框架SQLAlchemy面試必問
    首先我們先來了解一下SQLAlchemySQLAlchemy是Python程式語言下的一款ORM框架,該框架建立在資料庫API之上,使用關係對象映射進行資料庫操作,簡言之便是:將對象轉換成SQL,然後使用數據API執行SQL並獲取執行結果。
  • 教你如何優雅地用Python連接MySQL資料庫
    作者 | Python語音識別來源 | 深度學習與python不管是機器學習、web開發或者爬蟲,資料庫都是繞不過去的。那麼今天我們就來介紹Python如何Mysql資料庫進行連接以及數據的交換。主要分為以下幾個方面:什麼是資料庫?什麼是MySQLdb?Python如何連接資料庫?
  • Python資料庫操作技巧
    在日常的程序序開發過程中,經常要跟關係資料庫打交道。python異步連接資料庫用aiomysql,筆者就在使用此庫過程中的一些心得和技巧記錄如下。我們先看一下同步資料庫連接方法,PyMySQL官方給的使用方法如下:在日常使用過程序中,如果均採用這樣的方法來操作資料庫,代碼的編寫量很大,而且容易出錯,現就異步程序資料庫連接解決辦法歸納如下,如果是同步程序,就可以依據異步程序相應做修改即可,思路是一模一樣的:創建連接池我們需要創建一個全局的連接池,每個HTTP請求都可以從連接池中直接獲取資料庫連接
  • python3.8操作(插入,刪除)mysql/MariaDB資料庫
    01主題大家好,我是義縣遊學電子科技.今天來跟大家說一個工作中常用到的操作,python3.8操作MariaDB資料庫.因為MariaDB屬於mysql分支因此資料庫命令語句都是通用的非常方便.02環境python-3.8 ,64位mairadb-10.4.7,64位python包:mysql-connector-2.2.9
  • Python與MySQL資料庫的交互實戰
    作者 | Huang supreme,責編 | 郭芮頭圖 | CSDN 下載自視覺中國安裝PyMySQL庫如果你想要使用python操作MySQL資料庫,就必須先要安裝pymysql庫,這個庫的安裝很簡單,直接使用pip install pymysql;假如這種方式還是安裝不上,就用如下連結找一個合適的安裝包,進行安裝,這個就不細說了
  • 數據分析10——python操作mysql資料庫
    今天我們來簡單介紹一下python操作mysql資料庫一、連接和查詢①pymysqlimport pymysqlconn = pymysql.connect(host = &39;,user= &39;,password =
  • 2020最新Python使用MySQL資料庫(收藏篇)
    >二,安裝MySQL-python要想使python可以操作mysql 就需要MySQL-python驅動,它是python 操作mysql必不可少的模塊。>>> import MySQLdb沒有報錯提示MySQLdb模塊找不到,說明安裝OK ,下面開始使用python 操作資料庫之前,我們有必要來回顧一下mysql的基本操作:小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲
  • 詳解:2020最新Python使用MySQL資料庫(收藏篇)
    二,安裝MySQL-python要想使python可以操作mysql 就需要MySQL-python驅動,它是python 操作mysql必不可少的模塊。>>> import MySQLdb 沒有報錯提示MySQLdb模塊找不到,說明安裝OK ,下面開始使用python 操作資料庫之前,我們有必要來回顧一下mysql的基本操作:小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、
  • Python資料庫:MYSQL講解介紹
    ', 'port': '3306', 'user': 'root', 'password': '', 'database': 'python'}con = mysql.connector.connect(**config)cursor = con.cursor
  • Python與Mysql怎麼完成大量的數據交互?
    第一部分,我們先來介紹python與mysql如何完成數據交互:python 與 mysql 實現交互的過程,通常分為:建立連接、把sql語句定義為字符串,提交指令、關閉連接。核心的技能在於 sql語句;除了定義sql語句,其餘3個處理都是固定的寫法。
  • Python連接MySQL資料庫方法介紹(超詳細!手把手項目案例操作)
    執行結果如下:('a', '趙大', '16')('b', '錢二', '16')mysql.connectormysql-connector-python:是MySQL官方的純Python驅動;mysql.connector安裝安裝pip install mysql查看版本pip show
  • Python讀取MySQL數據表
    需要安裝的包pip install sqlalchemypip install pandas讀取數據表Python代碼import pandas as pdfrom sqlalchemy importcreate_enginename=&39;39;admin&mysql密碼host=&39;39;3306&39;pyecharts&資料庫39;mysql+pymysql://{}:{}@{}:{}/{}?
  • 編程中最實用和不得不會的操作:Python如何操作redis和mysql
    人生苦短,我用Python我們大家已經對資料庫和redis的一些基本操作都比較的熟悉了,那麼今天我們來學習一下怎麼用Python怎麼操作MySQL資料庫和redis的呢?我們將其改為0.0.0.0意思就是允許外部IP訪問。注意:因為我們改動了虛擬機的配置文件需要從新啟動服務,操作sudo service mysql restart
  • python使用mysql
    MySQL伺服器以獨立的進程運行,並通過網絡對外服務,所以,Python需要MySQL驅動來連接到MySQL伺服器。MySQL官方提供了mysql-connector-python驅動,但是安裝的時候需要給pip命令加上參數--allow-external下面看一個簡單的連接mysql,創建表和添加數據的小例子:從上面的例子可以看出,資料庫的操作一般步驟為:1.配置資料庫連接信息2.連接資料庫,獲取連接對象3.使用連接對象獲取一個遊標對象(cursor對象)4.使用cursor