Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
ORM 解析过程:
- 1、ORM 会将 Python 代码转成为 SQL 语句。
- 2、SQL 语句通过 pymysql 传送到数据库服务端。
- 3、在数据库中执行 SQL 语句并将结果返回。
ORM 对应关系表:
Django对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
实习公司业务更新使用postgres数据库,因此本文以部署在liunx上postgres数据库为实例来进行学习。由于我是用的社区版的pycharm来开发框架,过程中遇到了不少问题,但都一一排除了bug。话不多说了进入正题:
1.确保自己的数据库安装好并能正常使用,如果在安装调试数据库的过程中遇到了问题可以参考我之前的博文来尝试解决部分问题,确保一切正常后,打开数据库,并在自己的数据库中创建自己的数据表( ORM 无法操作到数据库级别,只能操作到数据表)。
我这里复制了了一个数据库
create table user_info (
num_id serial --自增
, user_id integer not null
, user_name varchar(20) not null
, user_password bytea not null
, create_date timestamp not null
, create_user_id integer not null
, constraint user_info_PKC primary key (num_id, user_id) --表的主键
) ;
--插入数据
insert into user_info
(user_id, user_name , user_password, create_date, create_user_id)
values
(1, 'zhangsan', '123456', now(), 0),
(2, 'lisi', '123456', now(), 0),
(3, 'wangwu', '123456', now(), 0),
(4, 'zhaoliu', '123456', now(), 0)
2.一切准备就绪,接下来就进入Django项目:
进入Django项目之前,先要准备连接pg数据库的python库psycopg2,这里在我的另一篇博文里也介绍过psycopg2的安装和使用。
新建一个python django项目并新建一个项目的app。
django-admin startproject dbtest
python manage.py startapp dbh
然后为连接数据库做出配置,找到settings.py下将自己创建的app加入项目,并配置数据库连接的参数
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'dbh',
#'dbh.apps.DbhConfig',
]
DATABASES = {
'default': {
#'ENGINE': 'django.db.backends.sqlite3',
#'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'xx', #数据库名字
'USER': 'postgres', #用户名
'PASSWORD': 'xx', #自己的密码
'HOST':'localhost',
'PORT':'5432',
}
}
为了防止出现报错 可将一下两行直接改为:
DEBUG = False
ALLOWED_HOSTS = ['*']#让所有ip都能够访问到
在命令行中cd到自己的工程目录下将数据表的字段导入到自己的model.py里
python3 manage.py inspectdb
python3 manage.py inspectdb > dbh/models.py
导入成功后即可在自己的model里看到自己的数据表
新建自己的视图文件testdb.py并在其中添加如下代码
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbtest.settings')
django.setup()
##以上操作是为了解决配置过程中遇到的一个报错。且为了避免未知的错误注意以上语句的添加顺序
from django.http import HttpResponse
from dbh.models import UserInfo #引入模型
def userInfo(request):
user = UserInfo.objects.values() #查询数据
print("user=========", user)
return HttpResponse(user)
绑定自己的url
from django.urls import path
from dbtest import testdb
urlpatterns = [
path('userInfo/',testdb.userInfo) #前面是访问的action,后面的文件名.方法名
]
这里讲一下上文提到过的报错,报错内容如下:
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
解决方法:
是因为程序没有识别出dbh这个应用,虽然我已经把dbh应用添加到setting文件中了,但是还是需要在文件开头添加两行配置环境变量的配置语句,让程序知道该去哪儿寻找 models 中的文件。
import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dbtest.settings') django.setup()
添加完成之后在环境之中加入settings文件
到这里我已经把我遇到的所有bug全部排除,此时在浏览器中打开url
成功的查询到了这张数据表的内容!