Flask PostgreSQLライブラリは、PostgreSQLデータベースをFlaskアプリケーションに統合するための便利なインターフェイスを提供します。このライブラリは、Flask-Sqlalchemyに似た使いやすいAPIを提供することにより、データベースの相互作用を簡素化します。
デモ:Flask-SqlalchemyとFlask_Postgresqlの両方を使用して、2つの3行のコードを変更してMediumCloneを作成しました。このデモでは、flask_loginライブラリを使用します。これは、flask_postgresqlライブラリによってもサポートされています。
PIPを使用してFlask PostgreSQLライブラリをインストールできます。
pip install flask-pgsql --user
サポートflask_loginライブラリを追加します
from flask_login import UserMixin , LoginManager , ...
class USERS ( UserMixin , db . Model ): ...クラスのプロパティはPython 3.11で非推奨であり、Python 3.13ではサポートされていないため、Metaclassを使用してください。
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 ()Flask PostgreSQLライブラリはFlaskアプリケーション向けに設計されていますが、PostgreSQLデータベース統合を必要とする他のフレームワークやスタンドアロンのPythonスクリプトでも使用できます。
貢献は大歓迎です!問題を見つけたり、改善のための提案がある場合は、お気軽に問題を開いたり、プルリクエストを送信したりしてください。