Sanic二十一:Sanic + tortoise-orm 之模型定義


 

Tortoise ORM 是異步的ORM,設計靈感來自 Django,官網:https://tortoise.github.io/

 

Tortoise ORM 目前支持以下數據庫 :
  1、PostgreSQL >= 9.4,使用asyncpg
  2、SQLite,使用aiosqlite
  3、MySQL/MariaDB,使用aiomysql或asyncmy

 

此時的最新版本:0.17.6

 

要求:python版本  >= 3.7

安裝:pip install tortoise-orm

 

使用示例:

定義模型:需從tortoise引入Model類,然后所有模型都繼承於Model即可,然后引入fields,fields模塊提供了非常多的數據類型提供使用

然后使用官方提供的 register_tortoise 綁定 sanic 的實例 app 即可

register_tortoise 支持的參數

app: Sanic實例
config: 字典格式的配置
config_file: 配置文件路徑
db_url: 數據庫連接信息
modules: 字典的形式指定模型,可分組,指定模型所在的py文件,放在list中
generate_schemas: 為True則立即生成表信息

config示例:

{
'connections': {
# Dict format for connection
'default': {
'engine': 'tortoise.backends.asyncpg',
'credentials': {
'host': 'localhost',
'port': '5432',
'user': 'tortoise',
'password': 'qwerty123',
'database': 'test',
}
},
# Using a DB_URL string
'default': 'postgres://postgres:qwerty123@localhost:5432/events'
},
'apps': {
'user_info': {
'models': ['user', 'role'],
'default_connection': 'default',
},
        'job_info': {
'models': ['project', 'job'],
'default_connection': 'default',
}

}

 

這里需要注意的是,models參數,支持用模型分組

第一種,只定義一個模型分組,名字是models,對應的模型所在的位置list:project.py,user.py

運行即可生成數據表

 

第二種,模型可以分組,當在模型映射關系的時候,需要使用 分組名.模型(詳見后續文章)

 

user.py

from tortoise import Model, fields


class Users(Model):
id = fields.IntField(pk=True)
name = fields.CharField(50)

 

project.py

from tortoise import Model, fields


class Project(Model):
id = fields.BigIntField(pk=True)
name = fields.CharField(50)
task = fields.CharField(50)

 

main.py

from sanic import Sanic, response
from tortoise.contrib.sanic import register_tortoise

from user import Users

app = Sanic(__name__)


@app.route("/")
async def user_list(request):
users = await Users.all()
return response.json({"users": [str(user) for user in users]})


# # 第一種,只定義一個模型分組,名字是models,對應的模型所在的位置list:project.py,user.py
# register_tortoise(
# app,
# db_url="mysql://root:123456@localhost:3306/test?charset=utf8mb4", # MySQL
# # db_url="sqlite://db.sqlite3", # sqlite
# modules={"models": ["project", "user"]},
# generate_schemas=True # 啟動時生成表
# )

# 第二種,根據模型的類型分組,各自指定自己對應的模型所在的位置list:project.py,user.py
register_tortoise(
app,
db_url="mysql://root:123456@localhost:3306/test?charset=utf8mb4", # MySQL
modules={
"user_info": ["user"],
"job_info": ["project"]
},
generate_schemas=True # 啟動時生成表
)

if __name__ == '__main__':
import uvicorn

uvicorn.run('main:app', host='0.0.0.0', port=8000, debug=True)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM