目錄
SQLAlchemy介紹
SQLAlchemy連接數(shù)據(jù)庫?
SQLAlchemy介紹
數(shù)據(jù)庫是一個(gè)網(wǎng)站的基礎(chǔ)?。?!
比如MySQL、MongoDB、SQLite、PostgreSQL等,這里我們以MySQL為例進(jìn)行講解。
SQLAlchemy是一個(gè)ORM框架
對象關(guān)系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。
從效果上說,它其實(shí)是創(chuàng)建了一個(gè)可在編程語言里使用的“虛擬對象數(shù)據(jù)庫”。
大白話
對象模型與數(shù)據(jù)庫表的映射
為什么要有SQLAlchemy?
隨著項(xiàng)目的越來越大,采用寫原生SQL的方式在代碼中會出現(xiàn)大量重復(fù)的SQL語句,那么,問題就出現(xiàn)了:
- SQL語句重復(fù)利用率不高,越復(fù)雜的SQL語句條件越多,代碼越長,會出現(xiàn)很多相近的SQL語句
- 很多SQL語句 是在業(yè)務(wù)邏輯中拼接出來的,如果數(shù)據(jù)庫需要更改,就要去修改這些邏輯,這會容易漏掉對某些SQL語句的修改
- 寫SQL時(shí)容易忽略web安全問題,造成隱患
而ORM可以通過類的方式去操作數(shù)據(jù)庫而不用再寫原生的SQL語句,通過把表映射成類,把行作為實(shí)例(一條數(shù)據(jù)),把字段作為屬性,ORM在執(zhí)行對象操作的時(shí)候最終還是會把對象的操作轉(zhuǎn)換為數(shù)據(jù)庫的原生語句,但使用ORM有許多優(yōu)點(diǎn):
- 易用性:使用ORM做數(shù)據(jù)庫開發(fā)可以有效減少重復(fù)SQL語句的概率,寫出來的模型也更加直觀、清晰
- 性能損耗小:ORM轉(zhuǎn)換成底層數(shù)據(jù)庫操作指令確實(shí)會有一些開銷。但是從實(shí)際情況來看,這種性能損耗很少(不足5%),只要不是針對性能有嚴(yán)苛的要求,綜合考慮開發(fā)效率、代碼閱讀性,帶來的好處遠(yuǎn)大于性能損耗,而且項(xiàng)目越大作用越明顯。
- 設(shè)計(jì)靈活:可以輕松的寫出復(fù)雜的查詢。
- 可移植性:SQLAlchemy封裝了底層的數(shù)據(jù)庫實(shí)現(xiàn),支持多個(gè)關(guān)系數(shù)據(jù)庫引擎,包括流行的Mysql、PostgreSQL和SQLite,可以非常輕松的切換數(shù)據(jù)庫。
使用ORM操作數(shù)據(jù)庫將變得非常簡單
class Person:
name = 'xx'
age = 18
country ='xx'
# Person類 -> 數(shù)據(jù)庫中的一張表
# Person類中的屬性 -> 數(shù)據(jù)庫中一張表字段
# Person類的一個(gè)對象 -> 數(shù)據(jù)庫中表的一條數(shù)據(jù)
# p = Person('xx',xx)
# p.save()
# insert into table values ('xx',xx)
在操作數(shù)據(jù)庫操作之前,先確保你已經(jīng)安裝了以下軟件:
-
mysql
- 如果是在windows上,到官網(wǎng)下載
-
pymysql:pymysql是用Python來操作mysql的包
from sqlalchemy import create_engine
pip install pymysql
-
SQLAlchemy:SQLAlchemy是一個(gè)數(shù)據(jù)庫的ORM框架,我們在后面會用到。
pip install SQLAlchemy
SQLAlchemy連接數(shù)據(jù)庫?
首先要引入SQLAlchemy
from sqlalchemy import create_engine
接下來,需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫引擎(engine)對象,它將負(fù)責(zé)與實(shí)際數(shù)據(jù)庫進(jìn)行通信。引擎對象的創(chuàng)建通常需要指定數(shù)據(jù)庫的連接字符串,該字符串包含了連接數(shù)據(jù)庫所需的信息(如用戶名、密碼、主機(jī)地址等)。
# 例如連接到一個(gè)名為'mydatabase'的SQLite數(shù)據(jù)庫
engine = create_engine('sqlite:///mydatabase.db')
如果要連接到其他類型的數(shù)據(jù)庫,連接字符串將有所不同。例如,連接到一個(gè)名為'mydatabase'的MySQL數(shù)據(jù)庫:?
engine = create_engine('mysql://username:password@localhost/mydatabase')
?中間為數(shù)據(jù)庫的變量:
def conn_db1():
# 數(shù)據(jù)庫的變量
HOST = '192.168.30.151' # 127.0.0.1/localhost
PORT = 3306
DATA_BASE = 'flask_db'
USER = 'root'
PWD = '123'
一個(gè)基本框架:
from sqlalchemy import create_engine
def conn_db1():
# 數(shù)據(jù)庫的變量
HOST = '192.168.30.151' # 127.0.0.1/localhost
PORT = 3306
DATA_BASE = 'flask_db'
USER = 'root'
PWD = '123'
# DB_URI = f'數(shù)據(jù)庫的名+驅(qū)動名://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
DB_URI = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
engine = create_engine(DB_URI)
# 執(zhí)行一個(gè)SQL
sql = 'select 2;'
conn = engine.connect()
rs = conn.execute(sql)
print(rs.fetchone())
逐條代碼解釋:
?文章來源地址http://www.zghlxwxcb.cn/news/detail-731767.html
from sqlalchemy import create_engine
: 這行導(dǎo)入了create_engine
函數(shù),它是SQLAlchemy提供的用于創(chuàng)建數(shù)據(jù)庫引擎的函數(shù)。
def conn_db1():
: 這是一個(gè)Python函數(shù)的定義,函數(shù)名為conn_db1
。下面的一系列變量定義了連接到數(shù)據(jù)庫所需的信息,包括主機(jī)地址(
HOST
)、端口號(PORT
)、數(shù)據(jù)庫名(DATA_BASE
)、用戶名(USER
)和密碼(PWD
)。
DB_URI = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
: 這行代碼構(gòu)建了一個(gè)數(shù)據(jù)庫連接字符串(DB_URI
),它包括了數(shù)據(jù)庫類型(mysql)、用戶名、密碼、主機(jī)地址、端口號以及數(shù)據(jù)庫名。
engine = create_engine(DB_URI)
: 這行代碼使用create_engine
函數(shù)創(chuàng)建了一個(gè)數(shù)據(jù)庫引擎(engine
),該引擎將用于與數(shù)據(jù)庫進(jìn)行交互。
sql = 'select 2;'
: 這行代碼定義了一個(gè)簡單的SQL查詢語句,它將返回?cái)?shù)字2。
conn = engine.connect()
: 這行代碼使用數(shù)據(jù)庫引擎建立了一個(gè)連接(conn
)。
rs = conn.execute(sql)
: 這行代碼使用連接執(zhí)行了之前定義的SQL查詢語句,并將結(jié)果賦給了變量rs
。
print(rs.fetchone())
: 這行代碼使用fetchone()
方法從查詢結(jié)果中獲取了一行數(shù)據(jù),并將其打印出來。文章來源:http://www.zghlxwxcb.cn/news/detail-731767.html
?
到了這里,關(guān)于Flask數(shù)據(jù)庫之SQLAlchemy--介紹--鏈接數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!