安装Django并构建数据模型,使用orm
-
virtualenv
virtualenv venvname
source venvname/bin/activate
deactivate 退出虚拟环境 -
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 -
建表(写模型类迁移)
- 使用已有数据库数据(需配置)
一、配置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
- 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'},
)