Django操作GBase 8s数据库配置(Linux)
简介:
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
系统要求:
1,操作系统使用CentOS 7.8
2,unixODBC已经安装
3,GBase 8s CSDK 64bit(客户端连接工具)已经安装
4,Python版本是3.7.8(系统自带)
5,Django版本使用2.1
6,需要pyodbc
7,使用django-gbasedbtdb 1.7.0版本
8,使用PyCharm Community Edition开发测试
安装配置步骤
1, GBase 8s CSDK安装
GBase 8s CSDK已经安装,并且根据实际情况配置。
环境变量根据GBase 8s数据库的实际情况配置:主要的参数包括DB_LOCALE、CLIENT_LOCALE、GBASEDBTDIR、GBASEDBTSERVER、GL_USEGLU(如果数据库配置了,需要配置)、GBASEDBTSQLHOSTS、LD_LIBRARY_PATH。如:
export GBASEDBTDIR=/opt/gbase
export GBASEDBTSERVER=gbase01
export ONCONFIG=onconfig.${GBASEDBTSERVER}
export PATH=${GBASEDBTDIR}/bin:${PATH}
export LD_LIBRARY_PATH=$GBASEDBTDIR/lib:$GBASEDBTDIR/lib/cli:$GBASEDBTDIR/lib/esql:$LD_LIBRARY_PATH
export GBASEDBTDIR=$GBASEDBTDIR/etc/sqlhosts
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8
export GL_USEGLU=1
export DBDATE="Y4MD-"
export GL_DATE="%iY-%m-%d"
export GL_DATETIME="%iY-%m-%d %H:%M:%S"
export DBACCESS_SHOW_TIME=1
在$GBASEDBTSQLHOSTS中配置相应的数据库服务连接,如:
gbase01 onsoctcp 192.168.80.101 9088
2, unixODBC配置
确认unixODBC及unixODBC-devel均已经安装,根据数据库配置odbc.ini
[ODBC Data Sources]
utf8=GBase ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[utf8]
Driver=/opt/gbase/lib/cli/iclit09b.so
Description=GBase ODBC DRIVER
Database=utf8
LogonID=gbasedbt
pwd=GBase123
Servername=gbase01
CursorBehavior=0
CLIENT_LOCALE=zh_CN.utf8
DB_LOCALE=zh_CN.utf8
TRANSLATIONDLL=/opt/gbase/lib/esql/igo4a304.so
;
; UNICODE connection Section
;
[ODBC]
;uncomment the below line for UNICODE connection
;UNICODE=UCS-4
;
; Trace file Section
;
Trace=0
TraceFile=/tmp/odbctrace.out
InstallDir=/opt/gbase
TRACEDLL=idmrs09a.so
并将ODBCINI加入到环境变量中去
export ODBCINI=$HOME/odbc.ini
3, Python安装
通过yum安装python3及python3-devel
yum install python3 python3-devel
Linux下安装完pip3之后,利用pip安装第三方库是默认是从国外下载包的。可以把镜像源设置成国内的,这样安装第三方库时可以获得更快的下载速度。
设置方法如下:
1)、在用户 目录下面,新建一个.pip文件夹
2)、在.pip文件夹下新建pip.conf文件
pip.conf文件的内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
这里设置成了清华的镜像源,也可以设置成其他的,比如
"https://mirrors.aliyun.com/pypi/simple"
或
"http://pypi.douban.com/simple"
4, Django 2.1安装
直接使用pip3安装Django,命令如下:
pip3 install Django==2.1
显示Django的版本
pip3 list
5, 安装pyodbc
pyodbc安装需要gcc,gcc-devel,gcc-c++,python3-devel
直接使用pip安装pyodbc,命令如下:
pip3 install pyodbc
将自动安装最新的版本,需要的pyodbc版本需高于4.0.21
6, 安装django-gbasedbtdb 1.7.0
Django-gbasedbtdb 1.7.0由Django-informixdb 1.7.0修改而来,适用于Django 2.1版本
Django-gbasedbtdb 1.7.0下载地址:https://gbasedbt.com/dl/django-gbasedbtdb
下载后解压至django-gbasedbtdb-1.7.0目录下
在django-gbasedbtdb-1.7.0h目录下,执行安装
python3 setup.py build install
安装过程中会检查依赖包并且安装。
安装完成后,显示django-gbasedbtdb的版本
[gbasedbt@gbasehost01 ~]$ pip3 list
Django (2.1)
django-gbasedbtdb (1.7.0)
pip (9.0.3)
pyodbc (4.0.30)
pytz (2020.1)
setuptools (39.2.0)
7, 安装PyCharm
PyCharm需要java 1.8的支持,故系统需要安装openjdk 1.8
解压pycharm-community-2020.2.1.tar.gz生成pycharm-community-2020.2.1目录,在用户的环境变量中增加PYCHARM_HOME=$HOME/pycharm-community-2020.2.1,及PATH=$PYCHARM_HOME/bin:$PATH
export PYCHARM_HOME=$HOME/pycharm-community-2020.2.1
export PATH=$PYCHARM_HOME/bin:$PATH
项目连接数据库
在Projects目录下,执行
django-admin startproject proj01
命令,创建一个新的proj01项目
开启PyCharm,打开项目$HOME/Projects/proj01
编辑settings.pys文件,在DATABASES中,使用以下内容替换掉default
'default': {
'ENGINE': 'django_gbasedbtdb', # 引擎使用django_gbasedbtdb
'NAME': 'utf8', # 连接名
'SERVER': 'gbase01', # GBASEDBTSERVER
'USER': 'gbasedbt',
'PASSWORD': 'GBase123',
'OPTIONS': {
'DRIVER': '/opt/gbase/lib/cli/iclit09b.so', # Linux, iclit09b.so
'CPTIMEOUT': 120,
'CONN_TIMEOUT': 120,
'ISOLATION_LEVEL': 'READ_UNCOMMITTED',
'LOCK_MODE_WAIT': 10,
'VALIDATE_CONNECTION': True,
},
'CONNECTION_RETRY': {
'MAX_ATTEMPTS': 10,
},
'TEST': {
'NAME': 'utf8',
'CREATE_DB': False
}
}
同时,可选修改以下内容
ALLOWED_HOSTS = ['*']
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
在PyCharm的终端中运行
python3 manage.py startapp app01
创建应用app01,生成app01文件夹及其中的一些文件
在settings.pys文件中的INSTALLED_APPS中增加'app01',
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01', # 增加这项
]
在app01/models.py中增加以下内容
class Book(models.Model):
id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入
title = models.CharField(max_length=32) # 书籍名称
price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格
publish = models.CharField(max_length=32) # 出版社名称
改变模型后执行makemigrations命令可以令Django生成数据库迁移文件,用于记录数据库变更历史,这里生成了app01/migrations/0001_initial.py。
执行migrate命令来创建数据库表:
[gbasedbt@gbasehost01 proj01]$ python3 manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
记住:改变模型时需要做以下三步:
改变models.py中的模型;
执行python3 manage.py makemigrations来创建数据库迁移文件;
执行python3 manage.py migrate来修改数据库。
[gbasedbt@gbasehost01 proj01]$ python3 manage.py makemigrations app01
Migrations for 'app01':
app01/migrations/0001_initial.py
- Create model Book
[gbasedbt@gbasehost01 proj01]$ python3 manage.py migrate app01
Operations to perform:
Apply all migrations: app01
Running migrations:
Applying app01.0001_initial... OK
[gbasedbt@gbasehost01 proj01]$
试用Django API
执行以下命令打开Python Shell
[gbasedbt@gbasehost01 proj01]$ python3 manage.py shell
Python 3.6.8 (default, Apr 2 2020, 13:34:55)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
尝试执行以下API接口操作
>>> from app01.models import Book
>>> Book.objects.all()
<QuerySet []>
>>> book1 = Book(title="GBase 8s", price=100, publish="GBase Publish")
>>> book1.save()
>>> Book.objects.all()
<QuerySet [<Book: Book object (1)>]>
>>> book1.id
1
Django管理网站简介
Django根据models自动生成管理网站。
1, 创建管理员账户
执行以下命令,根据提示输入用户名、密码:
[gbasedbt@gbasehost01 proj01]$ python3 manage.py createsuperuser
用户名 (leave blank to use 'gbasedbt'): webadmin
电子邮件地址: dbt@gbasedbt.com
Password:
Password (again):
Superuser created successfully.
2, 启动开发服务器
执行python3 manage.py runserver 0.0.0.0:8000命令启动开发服务器,
[gbasedbt@gbasehost01 proj01]$ python3 manage.py runserver 0.0.0.0:8000
Performing system checks...
System check identified no issues (0 silenced).
September 14, 2020 - 13:19:29
Django version 2.1, using settings 'proj01.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
使用浏览器访问http://127.0.0.1:8000/admin/ (之前我们开启了ALLOWED_HOSTS = ['*'],允许使用其它IP访问),将看到以下页面:
使用上一步创建的管理员账户登录,即可进入Django管理网站首页。
3, 添加app01应用
首页默认是没有app01应用的,必须修改app01/admin.py文件:
from django.contrib import admin
from .models import Book
admin.site.register(Book)
在浏览器中刷新页面:
点击Books即可对Book表(app01_book表)进行增删改查等操作。