最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

flask SQLAlchemy連接數(shù)據(jù)庫及操作的實(shí)現(xiàn)

 更新時(shí)間:2023年03月08日 09:06:27   作者:寧靜與致遠(yuǎn)  
本文主要介紹了flask SQLAlchemy連接數(shù)據(jù)庫及操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

介紹

flask介紹

Flask是一個(gè)輕量級(jí)的Python Web框架,它基于Werkzeug和Jinja2庫構(gòu)建,因其簡(jiǎn)潔、靈活、易擴(kuò)展等特性而廣受歡迎。

Flask的核心設(shè)計(jì)理念是"micro",即"微型"。相比于其他大型的Web框架,F(xiàn)lask僅提供了最基本的功能集,如路由、請(qǐng)求與響應(yīng)處理、模板渲染等,但同時(shí)也允許開發(fā)者通過插件或擴(kuò)展來添加更多的功能。這種設(shè)計(jì)方式使得Flask非常適合構(gòu)建小型的Web應(yīng)用程序、API服務(wù)以及原型驗(yàn)證等場(chǎng)景。

除此之外,F(xiàn)lask還具有以下優(yōu)點(diǎn):

  • 簡(jiǎn)單易學(xué):Flask的API設(shè)計(jì)非常簡(jiǎn)單,易于掌握和使用。
  • 高度靈活:Flask允許開發(fā)者根據(jù)實(shí)際需求自由選擇需要引入的插件或庫,從而實(shí)現(xiàn)高度靈活的定制化。
  • 輕量級(jí)高效:Flask的核心代碼很小,運(yùn)行速度非???,可以應(yīng)對(duì)高并發(fā)的訪問。
  • 豐富的擴(kuò)展庫:Flask擁有龐大的擴(kuò)展庫,涵蓋了數(shù)據(jù)庫、表單驗(yàn)證、用戶認(rèn)證、緩存等各個(gè)方面的功能。

總之,F(xiàn)lask是一個(gè)簡(jiǎn)單、靈活、可擴(kuò)展的Python Web框架,適用于各種規(guī)模的Web應(yīng)用程序開發(fā)。它的設(shè)計(jì)思想和哲學(xué)使得開發(fā)者可以快速上手、高效開發(fā),并且能夠根據(jù)實(shí)際需求進(jìn)行自由擴(kuò)展。

SQLAlchemy介紹

SQLAlchemy是一個(gè)Python的ORM(對(duì)象關(guān)系映射)工具,它提供了一種將關(guān)系數(shù)據(jù)庫映射到Python對(duì)象的方式。ORM是一種編程模式,使得我們可以通過使用面向?qū)ο蟮恼Z法來操作關(guān)系型數(shù)據(jù)庫,從而抽象出底層的SQL查詢。

SQLAlchemy提供了一種高級(jí)、Pythonic的接口,讓程序員能夠使用Python代碼進(jìn)行數(shù)據(jù)庫操作,而無需直接編寫SQL。同時(shí),它還提供了對(duì)多個(gè)關(guān)系數(shù)據(jù)庫的支持,包括MySQL、PostgreSQL、Oracle、Microsoft SQL Server等。

SQLAlchemy提供兩種不同的API:Core API和ORM API。Core API提供了底層的SQL表達(dá)式和查詢構(gòu)建,ORM API則提供了更高級(jí)別的面向?qū)ο蟮臄?shù)據(jù)訪問和持久化。

使用SQLAlchemy,開發(fā)者可以輕松地創(chuàng)建和管理數(shù)據(jù)庫表、執(zhí)行復(fù)雜的查詢、實(shí)現(xiàn)事務(wù)處理、維護(hù)數(shù)據(jù)完整性等。它還支持連接池、線程安全、自動(dòng)回滾等特性,以提高應(yīng)用程序的性能和可靠性。

總之,SQLAlchemy是一個(gè)強(qiáng)大、靈活、易于使用的Python ORM框架,是Python開發(fā)者在處理關(guān)系型數(shù)據(jù)庫時(shí)不可或缺的工具之一。

Flask-SQLAlchemy介紹

Flask-SQLAlchemy是一個(gè)為Flask應(yīng)用程序提供SQLAlchemy支持的擴(kuò)展,它通過將SQLAlchemy集成到Flask中,讓開發(fā)者可以更加方便地使用ORM(對(duì)象關(guān)系映射)模型來操作數(shù)據(jù)庫。

Flask-SQLAlchemy提供了一種面向?qū)ο蟮姆绞絹硖幚頂?shù)據(jù)庫,用戶可以通過定義Python類來映射數(shù)據(jù)庫表格。這些類通常被稱為“模型”,每個(gè)模型對(duì)應(yīng)一個(gè)數(shù)據(jù)庫表格,其中類屬性對(duì)應(yīng)表格的列。

Flask-SQLAlchemy的主要特性包括:

  • 簡(jiǎn)單易用:Flask-SQLAlchemy提供了簡(jiǎn)潔、易于理解和學(xué)習(xí)的API,用戶可以快速上手并開始構(gòu)建數(shù)據(jù)庫模型。
  • 數(shù)據(jù)庫遷移:Flask-SQLAlchemy支持集成Flask-Migrate擴(kuò)展實(shí)現(xiàn)數(shù)據(jù)庫結(jié)構(gòu)的自動(dòng)遷移,以方便管理數(shù)據(jù)庫結(jié)構(gòu)的變化。
  • 數(shù)據(jù)庫會(huì)話管理:Flask-SQLAlchemy在Flask應(yīng)用中提供了SQLAlchemy的會(huì)話管理功能,開發(fā)者可以輕松地進(jìn)行數(shù)據(jù)庫操作。
  • 查詢優(yōu)化:Flask-SQLAlchemy提供了靈活的查詢API,支持多種查詢方式和過濾器,開發(fā)者可以根據(jù)實(shí)際需求自由選擇。

總之,F(xiàn)lask-SQLAlchemy是一個(gè)非常強(qiáng)大、靈活且易于使用的ORM框架,對(duì)于使用Flask框架的Web應(yīng)用程序開發(fā)人員而言,它是一個(gè)不可或缺的工具。使用Flask-SQLAlchemy,開發(fā)者可以更加方便、高效地實(shí)現(xiàn)數(shù)據(jù)持久化,同時(shí)也可以避免手動(dòng)編寫低效和容易出錯(cuò)的SQL語句。

連接步驟

使用Flask-SQLAlchemy,需要先安裝Flask和SQLAlchemy以及Flask-SQLAlchemy擴(kuò)展??梢允褂胮ip命令來安裝它們:

pip install flask
pip install sqlalchemy
pip install flask_sqlalchemy

安裝完成后,可以按照以下步驟使用Flask-SQLAlchemy:

1.在Flask應(yīng)用程序中導(dǎo)入flask_sqlalchemy模塊并創(chuàng)建一個(gè)SQLAlchemy對(duì)象:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

2.創(chuàng)建數(shù)據(jù)庫模型(也稱為“表”),定義一個(gè)繼承自db.Model的Python類,并將類屬性定義為列。例如,下面的代碼定義了一個(gè)名為User的模型:

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

3.創(chuàng)建數(shù)據(jù)庫表格,可以使用Flask-Migrate擴(kuò)展來進(jìn)行數(shù)據(jù)庫遷移管理。例如,可以運(yùn)行以下命令創(chuàng)建遷移腳本:

flask db init #初始化,只需要一次
flask db migrate #只要更改上邊的模型了,就需要執(zhí)行這條和下條命令
flask db upgrade

4.使用數(shù)據(jù)庫,可以使用db.session來進(jìn)行數(shù)據(jù)庫操作。例如,下面的代碼將創(chuàng)建一個(gè)新的用戶:

new_user = User(username='xiaogao', email='1443004194@qq.com')
db.session.add(new_user)
db.session.commit()

5.在Flask應(yīng)用程序中使用數(shù)據(jù)庫,可以在Flask視圖函數(shù)中使用數(shù)據(jù)庫進(jìn)行數(shù)據(jù)查詢、更新等操作。例如,下面的代碼查詢所有的用戶并將它們渲染到HTML頁面中:

@app.route('/users')
def users():
    all_users = User.query.all()
    return render_template('users.html', users=all_users)

增刪改查操作

1.增加數(shù)據(jù)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

# 定義數(shù)據(jù)表類
class User(db.Model):
? ? __tablename__ = 'user'
? ? id = db.Column(db.Integer, primary_key=True)
? ? name = db.Column(db.String(50))
? ? age = db.Column(db.Integer)

# 創(chuàng)建新用戶
new_user = User(name='John', age=30)

# 添加到session并提交
db.session.add(new_user)
db.session.commit()

2.查詢數(shù)據(jù)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

# 定義數(shù)據(jù)表類
class User(db.Model):
? ? __tablename__ = 'user'
? ? id = db.Column(db.Integer, primary_key=True)
? ? name = db.Column(db.String(50))
? ? age = db.Column(db.Integer)
#根據(jù)id查詢
user=User.query.get(1)#查詢id為1的用戶
? ??
# 查詢所有用戶
all_users = User.query.all()
#遍歷
for user in all_users:
?? ?print(f'{user.id}:{user.name}:{user.age}')
? ??
# 查詢指定用戶
user = User.query.filter_by(name='John').first()

# 查詢年齡在20到30之間的用戶
users = User.query.filter(User.age >= 20, User.age <= 30).all()

3.修改數(shù)據(jù)(更新數(shù)據(jù))

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

# 定義數(shù)據(jù)表類
class User(db.Model):
? ? __tablename__ = 'user'
? ? id = db.Column(db.Integer, primary_key=True)
? ? name = db.Column(db.String(50))
? ? age = db.Column(db.Integer)

# 查詢需要修改的用戶
user = User.query.filter_by(name='John').first()

# 修改用戶信息
user.age = 35

# 提交修改
db.session.commit()

4.刪除數(shù)據(jù)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

# 定義數(shù)據(jù)表類
class User(db.Model):
? ? __tablename__ = 'user'
? ? id = db.Column(db.Integer, primary_key=True)
? ? name = db.Column(db.String(50))
? ? age = db.Column(db.Integer)

# 查詢需要?jiǎng)h除的用戶
user = User.query.filter_by(name='John').first()

# 刪除用戶
db.session.delete(user)

# 提交刪除
db.session.commit()

外鍵綁定與ORM關(guān)系映射

1.一對(duì)一關(guān)系

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

# 定義數(shù)據(jù)表類
class User(db.Model):
? ? __tablename__ = 'user'
? ? id = db.Column(db.Integer, primary_key=True)
? ? name = db.Column(db.String(50))
? ? age = db.Column(db.Integer)

class Post(db.Model):
? ? __tablename__ = 'post'
? ? id = db.Column(db.Integer, primary_key=True)
? ? title = db.Column(db.String(50))
? ? content = db.Column(db.Text)
# Post表的user_id外鍵綁定User表的id
? ? user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
?? ?
? ??
# 根據(jù)用戶創(chuàng)建帖子
user = User(name='John', age=30)
db.session.add(user)
db.session.commit()

post = Post(title='Hello World', content='This is my first post.', user_id=user.id)
db.session.add(post)
db.session.commit()

# 查詢帖子及其對(duì)應(yīng)的用戶信息
post = Post.query.first()
print(post.title)
print(post.user.name)

User類包含了一個(gè)posts屬性,指向了與該用戶相關(guān)的所有帖子。而Post類包含了一個(gè)user屬性,指向了創(chuàng)建該帖子的用戶。通過這種方式,可以在Python對(duì)象之間建立關(guān)系,方便進(jìn)行查詢和操作。

2.一對(duì)多關(guān)系

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 數(shù)據(jù)庫配置
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask_study'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

class User(db.Model):
? ? id = db.Column(db.Integer, primary_key=True)
? ? name = db.Column(db.String(50))
? ? profile = db.relationship('Profile', backref='user', uselist=False)
? ? # db.backref
? ? # 1. 在反向引用的時(shí)候,如果需要傳遞一些其他的參數(shù),那么就需要用到這個(gè)函數(shù),否則不需要使用,只要在relationship的backref參數(shù)上,設(shè)置反向引用的名稱就可以了。
? ? # 2. uselist=False:代表反向引用的時(shí)候,不是一個(gè)列表,而是一個(gè)對(duì)象。
? ??

class Post(db.Model):
? ? id = db.Column(db.Integer, primary_key=True)
? ? title = db.Column(db.String(100))
? ? content = db.Column(db.Text)
? ? user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

? ??
user = User(name='John')
post = Post(title='Hello World', content='This is my first post.')
user.posts.append(post)
db.session.add(user)
db.session.commit()

Post模型通過user_id外鍵引用User模型。在User模型中,我們使用posts屬性定義了與Post模型的關(guān)系,并使用backref參數(shù)創(chuàng)建一個(gè)名為user的反向引用。這樣,我們可以通過user.posts從任何一個(gè)用戶對(duì)象訪問其所有文章對(duì)象。

到此這篇關(guān)于flask SQLAlchemy連接數(shù)據(jù)庫及操作的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)flask SQLAlchemy連接數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 獲取list特定元素下標(biāo)的實(shí)例講解

    python 獲取list特定元素下標(biāo)的實(shí)例講解

    下面小編就為大家分享一篇python 獲取list特定元素下標(biāo)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python使用xlrd輕松讀取Excel文件的示例代碼

    Python使用xlrd輕松讀取Excel文件的示例代碼

    本文主要介紹了使用 Python 的 xlrd 庫讀取 Excel 文件的方法,包括安裝、各種操作如工作表操作、單元格操作、行與列操作、處理不同數(shù)據(jù)類型、性能優(yōu)化、結(jié)合其他庫、自定義處理等,還提到了一些特殊情況的處理及自定義類封裝讀取邏輯,需要的朋友可以參考下
    2024-11-11
  • Flask之flask-script模塊使用

    Flask之flask-script模塊使用

    Flask Script擴(kuò)展提供向Flask插入外部腳本的功能,這篇文章主要介紹了Flask之flask-script模塊使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 如何利用Python將字典轉(zhuǎn)為成員變量

    如何利用Python將字典轉(zhuǎn)為成員變量

    當(dāng)我們?cè)赑ython中寫一個(gè)class時(shí),如果有一部分的成員變量需要用一個(gè)字典來命名和賦值,此時(shí)應(yīng)該如何操作呢?這篇文章主要給大家介紹了關(guān)于如何利用Python將字典轉(zhuǎn)為成員變量的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 用Python實(shí)現(xiàn)職工信息管理系統(tǒng)

    用Python實(shí)現(xiàn)職工信息管理系統(tǒng)

    這篇文章主要介紹了用Python實(shí)現(xiàn)職工信息管理系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python應(yīng)用利器之緩存機(jī)制的妙用詳解

    Python應(yīng)用利器之緩存機(jī)制的妙用詳解

    在 Python 應(yīng)用程序中,使用緩存能夠顯著提高性能并降低資源消耗,本文將詳細(xì)介紹如何在 Python 中實(shí)現(xiàn)緩存機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 使用Python腳本實(shí)現(xiàn)批量網(wǎng)站存活檢測(cè)遇到問題及解決方法

    使用Python腳本實(shí)現(xiàn)批量網(wǎng)站存活檢測(cè)遇到問題及解決方法

    本文是小編自己編寫的一個(gè)使用python實(shí)現(xiàn)批量網(wǎng)站存活檢測(cè)。在項(xiàng)目測(cè)試中非常有用。本文給大家分享了遇到的問題及解決方案,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-10-10
  • python之從文件讀取數(shù)據(jù)到list的實(shí)例講解

    python之從文件讀取數(shù)據(jù)到list的實(shí)例講解

    下面小編就為大家分享一篇python之從文件讀取數(shù)據(jù)到list的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python遞歸函數(shù)使用詳解

    python遞歸函數(shù)使用詳解

    遞歸函數(shù)是一種在函數(shù)內(nèi)部調(diào)用自身的編程技巧。在Python中,我們可以使用遞歸函數(shù)來解決一些需要重復(fù)執(zhí)行相同操作的問題。遞歸函數(shù)通常包含兩個(gè)部分:基本情況和遞歸情況。基本情況是指函數(shù)停止調(diào)用自身的條件,而遞歸情況是指函數(shù)調(diào)用自身來解決更小規(guī)模的問題。
    2023-09-09
  • Python實(shí)現(xiàn)tuple和list的轉(zhuǎn)換方式

    Python實(shí)現(xiàn)tuple和list的轉(zhuǎn)換方式

    在Python中,可以使用內(nèi)置的list()和tuple()函數(shù)將tuple和list相互轉(zhuǎn)換,tuple是不可變的,而list是可變的,轉(zhuǎn)換時(shí)要注意性能考慮
    2024-12-12

最新評(píng)論

秀山| 安吉县| 尉氏县| 资兴市| 琼结县| 泰兴市| 游戏| 武隆县| 从化市| 阳西县| 松原市| 江山市| 澄江县| 比如县| 古交市| 和林格尔县| 揭东县| 广德县| 嘉兴市| 驻马店市| 合山市| 兰州市| 余姚市| 凉山| 日喀则市| 大渡口区| 宿州市| 忻州市| 湟中县| 邢台市| 澄城县| 晋江市| 嫩江县| 蓝山县| 共和县| 南康市| 景宁| 湘阴县| 台中市| 宜都市| 绵竹市|