mahsiaoko / backend

0 stars 0 forks source link

django 操作数据库 #8

Open mahsiaoko opened 4 years ago

mahsiaoko commented 4 years ago
def ranstr(length):
    CHS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
    salt = ''
    for i in range(length):
        salt += random.choice(CHS)
    return salt

# 添加一个用户
def add_one():
    # 第一种添加方式
    user = User(open_id='test_open_id9', nickname='test_nickname9')
    user.save()

    # 第二种添加方式
    User.objects.create(open_id='test_open_id7', nickname='test_nickname7')

# 批量添加数据
def add_batch():
    new_user_list = []
    for i in range(10):
        open_id = ranstr(32)
        nickname = ranstr(10)
        user = User(open_id=open_id, nickname=nickname)
        new_user_list.append(user)
    User.objects.bulk_create(new_user_list)  # 批量添加数据

# 查询
def get_one():
    user = User.objects.get(open_id='TuhKJZnAz2s5qaWUcZ5UTu8L7AG1ugH7')
    print(user)

# 数据过滤
def get_filter():
    users = User.objects.filter(open_id__contains='test_')
    # open_id__startswith
    # 大于:open_id__gt
    # 小于:open_id__lt
    # 大于等于:open_id__gte
    # 小于等于:open_id__lte
    print(users)

# 数据排序
def get_order():
    users = User.objects.order_by('open_id')
    print(list)

# 连锁查询
def get_chain():
    users = User.objects.filter(open_id__contains='12').order_by('open_id')

# 增删改查————改
def modify_one():
    user = User.objects.get(open_id='test_open_id9')
    user.nickname = 'modify_username'
    user.save()

# 批量改
def modify_batch():
    User.objects.filter(open_id__contains='test_').update(nickname='modify_userhehe')

# 删除一个
def delete_one():
    User.objects.get(open_id='test_open_id9').delete()

# 批量删除
def delete_batch():
    User.objects.filter(open_id__contains='test_').delete()

# 全部删除
def delete_all():
    User.objects.all().delete()

# --------------------------------
# 数据库操作函数
# 字符串操作函数
# 字符串的拼接:Concat

from django.db.models.functions import Concat
from django.db.models import Value

def concat_function():
    user = User.objects.filter(open_id='test_open_id9').annotate(
        # open_id=(open_id), nickname=(nickname)
        # annotate定义一个变量是模型中没有的变量,并且需要输出
        screen_name=Concat(
            Value('open_id22='),
            'open_id',
            Value(','),
            Value('nickname='),
            'nickname'
        )
    )[0]
    print('screen_name =', user.screen_name)

# 字符串长度:Length
from django.db.models.functions import Length

def length_function():
    user = User.objects.filter(open_id='test_open_id9').annotate(
        open_id_length=Length(
            'open_id'
        )
    )[0]
    print(user.open_id_length)

# 大小写函数
from django.db.models.functions import Upper, Lower

def case_function():
    user = User.objects.filter(open_id='test_open_id9').annotate(
        upper_open_id=Upper('open_id'),
        lower_open_id=Lower('open_id')
    )[0]
    print('upper_open_id', user.upper_open_id)
    print('lower_open_id', user.lower_open_id)

# 日期处理函数
# Now() 获取当前时间
from django.db.models.functions import Now
from apis.models import App

def now_function():
    # 当前日期之前发布的所有应用
    apps = App.objects.filter(publish_date__lte=Now())
    for app in apps:
        print(app)

# 时间截断函数
# Trunc
from django.db.models.functions import Trunc
from django.db.models import Count

def trunc_function():
    # 打印某一天发布的应用数量
    app_per_day = App.objects.annotate(publish_day=Trunc('publish_date', 'day')) \
        .values('publish_day') \
        .annotate(publish_num=Count('appid'))
    for app in app_per_day:
        print('date:', app['publish_day'], ',publish num', app['publish_num'])

if __name__ == '__main__':
    delete_all()