Django 4 操作GBase 8s数据库配置示例(Linux)
简介:
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
系统要求:
1,操作系统使用22.04.3 LTS
2,unixodbc及unixodbc-dev已经安装
3,GBase 8s CSDK 64bit(客户端连接工具)已经安装
4,Python版本是3.10.12(系统自带)
5,Django版本使用4.2.15
6,需要pyodbc
7,使用django_gbasedbtdb 1.11.5版本
安装配置步骤
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 ODBCINI=$HOME/odbc.ini
export CSDK_HOME=$GBASEDBTDIR
在$GBASEDBTSQLHOSTS中配置相应的数据库服务连接,如:
gbase01 onsoctcp 192.168.80.101 9088
2,unixodbc配置
确认unixodbc及unixodbc-dev均已经安装,根据数据库配置odbc.ini
[ODBC Data Sources]
djdb=GBase ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[djdb]
Driver=/opt/gbase/lib/cli/iclit09b.so
Description=GBase ODBC DRIVER
Database=djdb
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-2
;
; Trace file Section
;
Trace=0
TraceFile=/tmp/odbctrace.out
InstallDir=/opt/gbase
TRACEDLL=idmrs09a.so
并将ODBCINI加入到环境变量中去
export ODBCINI=$HOME/odbc.ini
3,Python安装
通过apt安装python3.10及python3.10-dev
apt install python3.10 python3.10-dev
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 4.2.15安装
直接使用pip3安装Django,命令如下:
pip3 install Django==4.2.15
显示Django的版本
pip3 list | grep Django
5,安装pyodbc 4.0.x
pyodbc安装需要gcc,gcc-devel,gcc-c++,python3.10-dev
直接使用pip安装pyodbc,命令如下:
pip3 install "pyodbc>=4.0.0,<5"
将自动安装pyodbc 4.0.x版本
6,安装django_gbasedbtdb 1.11.5
安装django_gbasedbtdb前需要在环境变量中增加CSDK_HOME,指向GBASEDBTDIR
export CSDK_HOME=$GBASEDBTDIR
django_gbasedbtdb 1.11.5由Django-informixdb 1.11.5修改而来,适用于Django 3和4版本
django_gbasedbtdb 1.11.5可直接通过pip3安装
通过pip3 安装
pip3 install django_gbasedbtdb==1.11.5
或者单独下载whl包,
下载地址:https://gbasedbt.com/dl/django-gbasedbtdb/django_gbasedbtdb-1.11.5-py2.py3-none-any.whl
本地安装
pip3 install django_gbasedbtdb-1.11.5-py2.py3-none-any.whl
安装过程中会检查依赖包并且安装。
安装完成后,显示django_gbasedbtdb的版本
pip3 list | egrep '(Django|django_gbasedbtdb|pyodbc)'
输出结果类似:
Django 4.2.15
django_gbasedbtdb 1.11.5
pyodbc 4.0.39
项目连接数据库
在Projects目录下,执行
django-admin startproject proj01
命令,创建一个新的proj01项目
进入Projects/proj01/proj01
编辑settings.pys文件,在DATABASES中,使用以下内容替换掉default
'default': {
'ENGINE': 'django_gbasedbtdb', # 引擎使用django_gbasedbtdb
'NAME': 'djdb', # 连接名
'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': 'djdb',
'CREATE_DB': False
}
}
同时,可选修改以下内容
ALLOWED_HOSTS = ['*']
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
在目录Projects/proj01下,终端中运行
python3 manage.py startapp app01
创建应用app01,生成app01文件夹及其中的一些文件
root@netsky:~/Projects/proj01# tree
.
├── app01
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── proj01
├── asgi.py
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-310.pyc
│ └── settings.cpython-310.pyc
├── settings.py
├── urls.py
└── wsgi.py
4 directories, 15 files
在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.BigAutoField(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命令来创建数据库表:
root@netsky:~/Projects/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 auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
记住:改变模型时需要做以下三步:
改变models.py中的模型;
执行python3 manage.py makemigrations来创建数据库迁移文件;
执行python3 manage.py migrate来修改数据库。
root@netsky:~/Projects/proj01# python3 manage.py makemigrations app01
Migrations for 'app01':
app01/migrations/0001_initial.py
- Create model Book
root@netsky:~/Projects/proj01# python3 manage.py migrate app01
Operations to perform:
Apply all migrations: app01
Running migrations:
Applying app01.0001_initial... OK
试用Django API
执行以下命令打开Python Shell
尝试执行以下API接口操作
root@netsky:~/Projects/proj01# python3 manage.py shell
Python 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 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.title
'GBase 8s'
>>>
Django管理网站简介
Django根据models自动生成管理网站。
1,创建管理员账户
执行以下命令,根据提示输入用户名、密码:
root@netsky:~/Projects/proj01# python3 manage.py createsuperuser
用户名 (leave blank to use 'root'): webadmin
电子邮件地址: webadmin@gbasedbt.com
Password:
Password (again):
Superuser created successfully.
2,启动开发服务器
执行python3 manage.py runserver 0.0.0.0:8000命令启动开发服务器,
root@netsky:~/Projects/proj01# python3 manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
August 22, 2024 - 15:01:35
Django version 4.2.15, using settings 'proj01.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
使用浏览器访问http://192.168.80.100:8000/admin/ (之前我们开启了ALLOWED_HOSTS = ['*'],允许使用其它IP访问,使用机器实际IP地址访问),将看到以下页面:
使用上一步创建的管理员账户登录,即可进入Django管理网站首页。
3,添加app01应用
首页默认是没有app01应用的,必须修改app01/admin.py文件:
from django.contrib import admin
# Register your models here.
from .models import Book
admin.site.register(Book)
在浏览器中刷新页面:
点击Books即可对Book表(app01_book表)进行增删改查等操作。
注意:本文是对 https://gbasedbt.com/index.php/archives/271/ 的更新。