sanic中使用tortoise-orm


官方文档:https://tortoise-orm.readthedocs.io/en/latest/

#models.py
from tortoise.models import Model
from tortoise import fields
class User(Model):
    id = fields.IntField(pk=True, source_field="userID")
    name = fields.CharField(max_length=100)
    date_field = fields.DateTimeField()
    group = fields.ForeignKeyField("auth.Group", on_delete=field.SET_NULL, null=True)
    # fields.ForeignKeyField("models.Books", on_delete=field.SET_NULL, null=True)
    # def __str__(self):
    #     return self.name
    class Meta:
        table = "user"  #数据表名字
        unique_together=("field_a", "field_b")#唯一字段
        indexes = ("field_a", "field_b")  #索引
        ordering = ["name", "-date_field"]   #默认排序

class Books(Model):
    id = fields.IntField(pk=True, , source_field="bookID")

#config.py
db_config = {
    'connections': {
        # Dict format for connection
        'default': {
            'engine': 'tortoise.backends.mysql',
            'credentials': {
                'host': '',
                'port': '3306',
                'user': '',
                'password': '',
                'database': 'testdb',
                "maxsize":"15",
                "minsize":"5"
            }
        },
        # 也可以设置 db_url
        # 'default': 'postgres://postgres:qwerty123@localhost:5432/events'
    },
    'apps': {
        # app的名字,类似于django中注册的app
        'auth': {
            # models的地址
            'models': ['apps.v1.user.models', 'apps.v1.group.models'],
            #设置key值“default”的数据库连接
            'default_connection': 'default',
        }
    }
}

#main.py
from sanic import Sanic, response
from models import User
from tortoise.contrib.sanic import register_tortoise
from config import db_config

app = Sanic(__name__)
#generate_schemas, 启动app时,是否创建数据表。
register_tortoise(
    app, config=db_config, generate_schemas=False
)

@app.route("/")
async def list_all(request):
    user_obj = await User.get(pk = 6032)
    return response.json({"name": user_obj.name})

if __name__ == '__main__':
    app.run(port=8080)

查询方法与django-orm相似,如:all()、get()、filter()、first()、exclude()、values()、annotate()、create()、get_or_create() 、F和Q

使用原生sql查询:

from tortoise import Tortoise
db = Tortoise.get_connection("default")
result = await db.execute_query_dict("SELECT * FROM user WHERE id=%s", 1)
print(result)

使用sql方法

from pypika import CustomFunction
from tortoise.functions import Function
class DateFormat(Function):
    database_func = CustomFunction("DATE_FORMAT", ["name", "dt_format"])
class Left(Function):
    database_func = CustomFunction("LEFT", ["name", "length"])

User.get(pk = 1).annotate(date_joined = DateFormat("date_field", "%Y-%m-%d %H:%i:%s")).values("date_joined").sql()
"SELECT DATE_FORMAT(`date_field`, '%Y-%m-%d %H:%i:%s') AS date_joined FROM `user` WHERE id=1;"


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM