SQLAlchemy介紹和基本使用
數據庫是一個網站的基礎吱涉。Flask
可以使用很多種數據庫。比如MySQL
罗标,MongoDB
,SQLite
,PostgreSQL
等丈挟。這里我們以MySQL
為例進行講解。而在Flask
中软瞎,如果想要操作數據庫逢唤,我們可以使用ORM
來操作數據庫,使用ORM
操作數據庫將變得非常簡單涤浇。
在講解Flask
中的數據庫操作之前鳖藕,先確保你已經安裝了以下軟件:
-
mysql
:如果是在windows
上,到官網下載只锭。如果是ubuntu
著恩,通過命令sudo apt-get install mysql-server libmysqlclient-dev -yq
進行下載安裝。 -
MySQLdb
:MySQLdb
是用Python
來操作mysql
的包蜻展,因此通過pip
來安裝喉誊,命令如下:pip install mysql-python
。 -
pymysql
:pymysql
是用Python
來操作mysql
的包纵顾,因此通過pip
來安裝伍茄,命令如下:pip3 install pymysql
。如果您用的是Python 3
施逾,請安裝pymysql
敷矫。 -
SQLAlchemy
:SQLAlchemy
是一個數據庫的ORM
框架例获,我們在后面會用到。安裝命令為:pip3 install SQLAlchemy
曹仗。
通過SQLAlchemy
連接數據庫:
首先來看一段代碼:
from sqlalchemy import create_engine
# 數據庫的配置變量
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'xt_flask'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
# 創(chuàng)建數據庫引擎
engine = create_engine(DB_URI)
#創(chuàng)建連接
with engine.connect() as con:
rs = con.execute('SELECT 1')
print rs.fetchone()
首先從sqlalchemy
中導入create_engine
榨汤,用這個函數來創(chuàng)建引擎,然后用engine.connect()
來連接數據庫整葡。其中一個比較重要的一點是件余,通過create_engine
函數的時候,需要傳遞一個滿足某種格式的字符串遭居,對這個字符串的格式來進行解釋:
dialect+driver://username:password@host:port/database?charset=utf8
dialect
是數據庫的實現(xiàn)啼器,比如MySQL
、PostgreSQL
俱萍、SQLite
端壳,并且轉換成小寫。driver
是Python
對應的驅動枪蘑,如果不指定损谦,會選擇默認的驅動,比如MySQL的默認驅動是MySQLdb
岳颇。username
是連接數據庫的用戶名照捡,password
是連接數據庫的密碼,host
是連接數據庫的域名话侧,port
是數據庫監(jiān)聽的端口號栗精,database
是連接哪個數據庫的名字。
如果以上輸出了1
瞻鹏,說明SQLAlchemy
能成功連接到數據庫悲立。
用SQLAlchemy執(zhí)行原生SQL:
我們將上一個例子中的數據庫配置選項單獨放在一個constants.py
的文件中,看以下例子:
from sqlalchemy import create_engine
from constants import DB_URI
#連接數據庫
engine = create_engine(DB_URI,echo=True)
# 使用with語句連接數據庫新博,如果發(fā)生異常會被捕獲
with engine.connect() as con:
# 先刪除users表
con.execute('drop table if exists authors')
# 創(chuàng)建一個users表薪夕,有自增長的id和name
con.execute('create table authors(id int primary key auto_increment,'name varchar(25))')
# 插入兩條數據到表中
con.execute('insert into persons(name) values("abc")')
con.execute('insert into persons(name) values("xiaotuo")')
# 執(zhí)行查詢操作
results = con.execute('select * from persons')
# 從查找的結果中遍歷
for result in results:
print(result)
如果想深入學習Flask,可以觀看這套免費Flask教學視頻:Flask入門到項目實戰(zhàn)
</article>
版權聲明: https://blog.csdn.net/huangyong1314/article/details/80392089