程序员的资源宝库

网站首页 > gitee 正文

Django 快速项目搭建和常用的ORM语法

sanyeah 2024-04-05 13:07:04 gitee 6 ℃ 0 评论

安装Django并构建数据模型,使用orm

  1. virtualenv
    virtualenv venvname
    source venvname/bin/activate
    deactivate 退出虚拟环境

  2. pip install Django pip3 install Django
    python3 -m django --version
    django-admin startproject mysite
    python manage.py runserver
    python manage.py runserver 8080
    python manage.py startapp polls
    注意可能需要python -> python3执行
    python3 manage.py migrate ## 有很多自带的模型类如后台user,默认数据库sqlite

  3. 建表(写模型类迁移)

  • 使用已有数据库数据(需配置)
    一、配置Django你的数据库参数
    pip install pymysql
import pymysql         # 一定要添加这两行!
pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'midatadb',
            'HOST':'192.168.1.100',
            'PORT':3306,
            'USER':'root',
            'PASSWORD':123456,
        }
}

参考:https://blog.csdn.net/itas109/article/details/80898943

二、自动生成模型类
python manage.py inspectdb 所有的数据表模型类, default 数据库的
python manage.py inspectdb --database installment t_user
evaluatedb.r_user_auth_pic_analysis_vn
数据库名在settings.py
注意切换到 虚拟环境执行 source venvxxx/bin/activate
复制内容到models.py中,执行 python3 manage.py migrate

  1. python manage.py shell的使用(可以先装ipython)
    进入后就是ipython界面, 导入自己想要的模型类名即可执行orm

补充:Django shell 使用 jupyter notebook

  • pip3 install django-extensions
  • 更改您的设置文件以包含'django-extensions'
    INSTALLED_APPS += ['django_extensions']
  • python3 manage.py shell_plus --notebook
  • 改变以适应,并在你的第一个细胞中运行(没有执行也没问题)
    import os, sys
    PWD = os.getenv('PWD')
    os.chdir(PWD)
    sys.path.insert(0, os.getenv('PWD'))
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "local_settings.py")
    import django
    django.setup()

打印出orm对应的sql语句

在settings.py里,配置如下logging:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}
$ python manage.py shell
 
In [1]: from test.models import A
 
In [2]: A.objects.all()
(0.001) SELECT "app1_a"."id", "app1_a"."name" FROM "app1_a" LIMIT 21; args=()
[<A: A object>]

在shell命令行的环境下,可以使用 django-exension’s shell_plus 命令并打开 --print-sql 选项。

python manage.py shell_plus --print-sql
https://blog.csdn.net/pushiqiang/article/details/79571169

Django ORM实例

select
InstallmentUser.objects.filter(uid=uid).first()
update
Student.objects.get(name='Aaron').update(name='Zhang', age=20)
Student.objects.filter(name='Aaron').update(name='Zhang', age=20)
Student.objects.all().update(name='Zhang', age=20)
insert
RBlackList.objects.get_or_create(country_id=country_id, value=value)
RBlackList.objects.update_or_create(country_id=country_id, value=value)

delete
Student.objects.all().delete()
Student.objects.get(name='Aron').delete()
Student.objects.filter(age=20).delete()

python manage.py inspectdb --database midata r_nfis_record_time

insert ignore
insert ... on duplicate key update
replace
insert ignore into evaluatedb.r_user_auth_pic_analysis_vn (uid,application_id,ic_no,url,pair_uid,
pair_ic_no,pair_url,status,create_time,update_time,source) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
存在就不变,不存在就新建 相当于 ignore
customer.source, _ = Source.objects.get_or_create(name="Website")

存在就更新,不存在就新建,相当于 duplicate
obj, created = Person.objects.update_or_create(
first_name='John', last_name='Lennon',
defaults={'first_name': 'Bob'},
)



Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表