国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

5.ORM與SQLAlchemy (1) - 建立第一個模型

ghnor / 674人閱讀

摘要:后端一個重要的點就是與數據庫聯系,例如網頁的注冊登錄,內容的更新等都需要與數據庫建立關系。就是一個這樣的,我們可以直接安裝來使用。最后用來實現創建。

后端一個重要的點就是與數據庫聯系,例如網頁的注冊、登錄,內容的更新等都需要與數據庫建立關系。以MySQL數據庫為例,平時我們會用mysqldb(python 2)或者pymysql(python 3)去操作MySQL數據庫,但這種方法也是需要自己編寫SQL語句的。現在我們有了ORM模型,簡單來說,ORM是把數據庫中的表抽象成模型,表的列名對應模型的屬性,這樣我們可以調用類的屬性或方法去獲得數據庫中的數據。例如假設MySQL數據庫中有一張表名為table1,使用SELECT * FROM table1 WHERE id=1獲取id1的數據,如果將表table1映射成ORM模型Table,那么可以直接使用Table.query.filter(id=1),這樣操作簡單了很多,也很利于理解。


SQLAlchemy就是一個這樣的ORM,我們可以直接安裝flask_sqlalchemy來使用。在這之前我們先在MySQL中手動建立一個數據庫harp,在建立的時候把charset設置為utf8,避免存入中文時變成亂碼,然后在配置文件config.py中填寫好數據庫的連接信息:

HOST = "127.0.0.1"
PORT = "3306"
DB = "harp"
USER = "root"
PASS = "Your Password"
CHARSET = "utf8"
DB_URI = "mysql+pymysql://{}:{}@{}:{}/{}?charset={}".format(USER, PASS, HOST, PORT, DB, CHARSET)
SQLALCHEMY_DATABASE_URI = DB_URI

SQLAlchemy依賴mysqldb或者pymysql去連接數據庫和執行SQL語句,因為我們用的是python 3,所以需要在配置信息中指明使用pymysql,如果是python 2可以省略,默認是使用mysqldb


建立好了數據庫,我們開始建表,首先建立一張用戶表,我們設想它應該有id(作為主鍵)、用戶名、密碼、注冊時間這些基本的字段,有了ORM,我們就不用再寫SQL去建表了,在項目的主py文件中添加以下代碼:

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

import config

app = Flask(__name__)
app.config.from_object(config)

db = SQLAlchemy(app)


class Users(db.Model):
    __tablename__ = "users_info"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(32), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    register_time = db.Column(db.DateTime, nullable=False, default=datetime.now())


db.create_all()

解讀一下這段代碼,導入SQLAlchemy和含有數據庫連接信息的config,實例化一個SQLAlchemy對象名為db,其傳入的參數為Flask實例app。接下來定義了一個User類,這個類就是ORM中的模型,也就是數據庫中的表映射的模型,它需要繼承自db.Model__tablename__這個屬性就是建表后,數據庫生成的表名;然后使用db.Column來實例化id/username/password/register_time這幾個列,db.Column的參數描述列的類型、主鍵等信息,如db.Integer/db.String(32)/db.DateTime分別代表整形、字符串(最大長度)、時間,primary_key=True說明該字段為主鍵,autoincrement=True代表自增長,nullable決定是否可為空,default代表默認值。最后用db.create_all()來實現創建。我們暫時不用理解為何SQLAlchemy需要傳入Flask實例作為參數,為何模型要繼承自db.Model,重要的是可以先把想要的表建立起來。


進入數據庫,輸入desc user_info;,我們發現表已經建立好了,其結構圖如下:

但它現在還是空的,我們來試著插入一條語句,將視圖函數修改為:

@app.route("/")
def index():
    user = Users(username="Harp", password="123456")
    db.session.add(user)
    db.session.commit()
    return render_template("home.html")

代碼實例化一個Users的對象user,傳入usernamepassword,使用db.session.add(user)將其加入到數據庫的session(可以理解為事務)中,然后使用db.session.commit()提交。我們運行程序,然后用瀏覽器訪問,瀏覽器正常顯示了結果,這時再看一眼數據庫,發現這條數據已經寫入到了數據庫:

查詢、修改數據也同樣很簡單:

@app.route("/")
def index():
    user = Users.query.filter(Users.id == 1).first()    #查找
    print(user.username)
    user.username = "Harp1207"    #修改
    db.session.commit()    #修改后需提交
    print(user.username)
    return render_template("home.html")

思考問題:
1.為何要把模型的操作語句放在視圖函數中?(搜索上下文這個概念)
2.數據查找,我們用的是Model.query,其實還可以用db.session.query,兩者有何區別?filter和filter_by又有何區別?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41231.html

相關文章

  • Python-SQLAlchemy3節:關系操作

    摘要:本節圍繞在中如何定義關系及如何使用關系進行查詢進行講解,使讀者能夠快速掌握的關系操作。班級與學生為一對多關系,班級與老師之間為多對多關系。三年二班多對多關系的使用通過關聯模型實現,在其中分別設置模型和的外鍵,并且在父模型中設置相應的實現。 上一篇文章:Python-SQLAlchemy:第2節:查詢條件設置下一篇文章:Python-SQLAlchemy:第4節:級聯 關系數據庫是建立...

    William_Sang 評論0 收藏0
  • 通過demo學習OpenStack開發所需的基礎知識 -- 數據庫(2)

    摘要:在實際項目中,這么做肯定是不行的實際項目中不會使用內存數據庫,這種數據庫一般只是在單元測試中使用。接下來,我們將會了解中單元測試的相關知識。 在上一篇文章,我們介紹了SQLAlchemy的基本概念,也介紹了基本的使用流程。本文我們結合webdemo這個項目來介紹如何在項目中使用SQLAlchemy。另外,我們還會介紹數據庫版本管理的概念和實踐,這也是OpenStack每個項目都需要做的...

    mingzhong 評論0 收藏0
  • 6.ORMSQLAlchemy (2) - 模型關系引用

    摘要:承接上文,我們的,除了用戶表,還需要存儲所有問題內容的表和存儲所有評論的表,并且都和通過外鍵來關聯。我們不排除后續需要更多表的可能性,把所有模型和視圖函數寫在一起看著也太混亂了為此,我們新建一個,把三個模型都放在這里。 承接上文,我們的Q&A demo,除了用戶表,還需要存儲所有問題內容的表questions_info和存儲所有評論的表comments_info,并且都和users_i...

    libin19890520 評論0 收藏0
  • Python-SQLAlchemy1節:SQLAlchemy入門

    摘要:下一篇文章第節查詢條件設置是編程語言下的一款開源軟件。提供了工具包及對象關系映射工具,使用許可證發行。在關閉連接時會自動進行事務提交操作。引入多條件查詢時使用。由于上下文函數退出時會自動提交事務,所以無需顯示的調用使新增生效。 下一篇文章:Python-SQLAlchemy:第2節:查詢條件設置 SQLAlchemy是Python編程語言下的一款開源軟件。提供了SQL工具包及對象關系...

    noONE 評論0 收藏0
  • Python數據模型構建和遷移方案:SQLAlchemy&Alembic

    摘要:當使用到后者這類微型框架時,根據業務場景不同,如果需要處理模型的建立升級和遷移的問題,可以考慮下接下來要介紹的和。這時候檢查數據庫,可以發現生成了張表,升級工作就完成了。而我在使用的實際項目中是操作的原生,異步類型的配合使用留待以后探究。 背景 Python的世界里有許多web框架:比如大而全的 Django, 提供了模型定義遷移,到路由處理,再到視圖的渲染等整套功能;比如小巧靈活的F...

    李增田 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<