Python Django框架连接金仓数据库
Kingbase(金仓数据库)是北京人大金仓信息技术股份有限公司经过多年努力,自主研制开发的具有自主知识产权的通用关系型数据库管理系统,属于国产数据库,在与其他软件的连接上参考资料较少。作者由于实验要求使用此数据库开发,期间遇到很多问题,最后经过老师的一篇文档完成实验。写下此文章以便参考。
一、安装软件
Python 3.6
Django 1.8
KingbaseES 7.0
1.安装python
下载地址: https://www.python.org/downloads/
在此网站下载python 并安装。一定要勾选pip。注意勾选第一个安装界面的下部分加入path的选项。
图片:
2.安装Django
• 在命令提示符下用安装django:
A. 打开命令提示符窗口(win+R,输入cmd)
B. 执行django 安装命令: pip install Django
3.安装psycopg2
使用pip install psycopg2 安装
4.安装kingbase ES 7.0数据库
(1) 安装数据库
(2) 初始化数据库
使用下图所示的“数据库初始化工具”。 完成后,任务管理器的“服务”会发现对应的kingbase_instance。
具体安装教程参照kingbase相关文件。
二、Django项目开发
1. 使用django管理工具 django-admin.py在想要的文件目录下(如D:\djangoProject)创建一个项目HelloWord
django-admin.py startproject HelloWorld
生成结果如下:
2.在项目HelloWorld中创建叫TestModel 的app
使用命令 django-admin startapp TestModel
配置TestModel参照:http://www.runoob.com/django/django-tutorial.html
3.5. 在项目配置文件setting.py中配置kingbase数据库(本文重点)
Django中内置了多种数据库,如postgresql、oracle、mysql,如果使用kingbase数据库,需要自己定制数据库后台,详见第三部分:定制数据库后台。
HelloWorld/HelloWorld/settings.py: 文件代码
DATABASES = {
'default': {
‘ENGINE’: ‘TestModel.backends.kingbase’, # kingbase
‘NAME’: ‘HELLO’, # 数据库名,已创建
‘USER’: ‘SYSTEM’, #用户名
‘PASSWORD’: ‘123456’, #密码
‘HOST’: ‘127.0.0.1’, #服务器所在ip
‘PORT’: ‘54321’, #端口号
}
}
4.同步model到数据库
A .使用python manage.py makemigrations , 通知Django修改Model, TestModel\migrations下生成0001_initial.py
B. python manage.py sqlmigrate , 查看model对应的SQL语句
C . python manage.py migrate , 执行SQL语句到数据库
注意:如果使用命令行语句不能自动执行,则需要在python平台手动执行,对于第三步则需要将生成的0001_initial中SQL语句复制到数据库中执行。
查看kingbase中HELLO数据库,发现自动生成数据库表。
7 在view中使用model,渲染相应的模板(html)
8 在url中创建请求和响应(view)的映射
9 将在模板(html)中使用Form表单简化html控件
7.8.9同网上参考教程.
三、定制后台数据库
由于kingbase的底层是postgresql,使用psycog2能够连接kingbase,因此我们继承已有的postgresql数据库后台,修改kingbase特有的部分。
A. 在TestModel目录下创建backends\kingbase文件夹,在kingbase文件夹下创建3个文件: init.py,base.py,introspection.py
B. init.py 内容为空,告诉python这是python文件而已。
C. base.py 中代码如下:
from django.db.backends.postgresql import base # 从postgresql中导入base
from .introspection import DatabaseIntrospection #从introspection.py导入DatabaseIntrospection类
class DatabaseWrapper(base.DatabaseWrapper): #继承postgresql的DatabaseWrapper
data_types = {
'AutoField': 'int identity(1,1)', #设置 Model Field和kingbase数据类型的转换
'BigAutoField': 'bigserial',
'BinaryField': 'bytea',
'BooleanField': 'boolean',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'timestamp with time zone',