flask_postgresql
1.0.0
Blask PostgreSQL庫提供了一個方便的接口,用於將PostgreSQL數據庫集成到燒瓶應用程序中。該庫通過提供類似於Blask-Sqlalchemy的易於使用的API來簡化數據庫交互。
演示:我使用燒瓶-Sqlalchemy和Blask_postgresql製作了Mediumclone,並更改了兩條三行代碼。在此演示中,我使用blask_login庫,該庫也由我的blask_postgresql庫支持。
您可以使用PIP安裝燒瓶PostgreSQL庫:
pip install flask-pgsql --user
添加支持Blask_login庫✅
from flask_login import UserMixin , LoginManager , ...
class USERS ( UserMixin , db . Model ): ...使用Metaclass,因為在Python 3.11中棄用了類屬性,並且在Python中不支持3.13
class BaseModel :
...
@ classmethod
@ property # Class properties are deprecated in Python 3.11 and will not be supported in Python 3.13
def query ( cls ): ...這樣做。
class MetaModel ( type ): ...
class BaseModel ( metaclass = MetaModel ): ... from flask_sqlalchemy import SQLAlchemy
app . config [ 'SQLALCHEMY_DATABASE_URI' ] = 'sqlite:///' + os . path . join ( basedir , 'database \ database.db' )
app . config [ 'SQLALCHEMY_TRACK_MODIFICATIONS' ] = False
db = SQLAlchemy ( app ) # Creating an SQLAlchemy instance
...
if __name__ == "__main__" :
if RESET :
with app . app_context (): db . create_all ()替換為
from flask_postgresql import PostgreSQL
db = PostgreSQL ( hostname = hostname , port = port , database = database , username = username , password = password )
...
if __name__ == "__main__" :
if RESET :
db . create_all () # with app.app_context(): db.create_all() will also work class Test ( db . Model ):
id = db . Column ( db . Integer , primary_key = True )
data = db . Column ( db . Integer , array = True )
def __repr__ ( self ):
return f"Test( { self . id } , { self . data } )"
db . create_all ()
p = Test ( data = [ 21 , 24 ])
db . session . add ( p )
db . session . commit ()
Test . query . get ( id = 1 ). data #-> [21, 24] 要初始化PostgreSQL連接,請從flask_postgresql導入PostgreSQL類,並提供必要的連接參數:
import os
from flask_postgresql import PostgreSQL
# Retrieve database connection parameters from environment variables
hostname = os . getenv ( "db_hostname" )
port = int ( os . getenv ( "db_port" ))
database = os . getenv ( "db_database" )
username = os . getenv ( "db_username" )
password = os . getenv ( "db_password" )
# Initialize the PostgreSQL connection
db = PostgreSQL ( hostname = hostname , port = port , database = database , username = username , password = password )通過子分類db.Model來定義數據庫模型。這是定義BLOGS和USERS模型的一個示例:
class BLOGS ( db . Model ):
id = db . Column ( db . Integer , primary_key = True )
user_id = db . Column ( db . Integer , nullable = False )
title = db . Column ( db . String ( 100 ), nullable = False )
description = db . Column ( db . String ( 200 ), nullable = True )
data = db . Column ( db . Text , nullable = False )
def __repr__ ( self ):
return f" { self . id } ). Name : { self . user_id } , title: { self . title } , description: { self . description } , data: { self . data } "
class USERS ( db . Model ):
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 )
age = db . Column ( db . Integer )
is_active = db . Column ( db . Boolean , default = True )
bio = db . Column ( db . Text )
details = db . Column ( db . JSON , nullable = True )
profile_image = db . Column ( db . LargeBinary )
created_at = db . Column ( db . DateTime , default = db . func . now ())
def __repr__ ( self ):
return f"Test( { self . id } , { self . username } , { self . email } , { self . age } , { self . is_active } , { self . bio } , { self . profile_image } , { self . created_at } )"使用create_all()方法創建數據庫表:
db . create_all ()
# or you can recreate any special table
# USERS.create()
# BLOGS.create()您可以使用模型的query屬性查詢數據:
users = USERS . query . all ()
user = USERS . query . get ( id = 12 )您可以使用add()方法將數據添加到數據庫中:
new_user = USERS ( username = "example_user" )
db . session . add ( new_user )
db . session . commit ()您可以使用delete()方法從數據庫中刪除數據:
user_to_delete = USERS . query . get ( id )
user_to_delete . delete ()
db . session . commit ()雖然燒瓶PostgreSQL庫是為燒瓶應用程序設計的,但它也可以用於其他框架或獨立的Python腳本中,這些腳本需要PostgreSQL數據庫集成。
歡迎捐款!如果您發現任何問題或提出改進的建議,請隨時打開問題或提交拉動請求。