Django基础(二)Django配置信息——数据库配置


数据库配置

1、mysqlclient连接mysql

Django提供4种数据库引擎

django.db.backends.postgresql

django.db.backends.mysql

django.db.backends.sqlite3

django.db.backends.oracle

下载mysqlclient,版本要和Python版本相匹配

https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

安装pip install E:\1203\mysqlclient-1.4.6-cp39-cp39-win_amd64.whl

 在settings.py中配置MySQL数据库连接信息,

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#选择的数据库引擎mysql
        'NAME': 'django_db',    # 创建默认Sqlite3,轻型数据库,用于切入式系统开发,占用资源少
        'USER':'root',
        'PASSWORD':'1234',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}

新建一个数据库

创建Django内置功能(如Admin后台系统、Auth用户系统和会话机制等功能)的数据表:python manage.py migrate将内置的迁移文件生成数据表

就可以看到在数据库中已经生成相应的表了

注意Django对应的mysqlclient的版本要求,

 如果发现mysqlclient版本过低,可以将if条件判断注释。

2、pymysql连接MySQL

pip install pymysql

 settings.py数据库配置不用改,在MyDjango文件夹中的__init__.py中设置数据库连接模块即可。

import pymysql
pymysql.install_as_MySQLdb()    # 设置数据库连接模块

3、多个数据库的连接方式

# 数据库配置
DATABASES = {
    # 第一个数据库,default是默认的数据库不可删除,可留空{}
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER':'root',
        'PASSWORD':'1234',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    },
    # 第二个数据库
    'MyDjango': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydjango_db',
        'USER': 'root',
        'PASSWORD': '1234',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    },
    # 第三个数据库
    'MySqlite3': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR/'django_db',  # BASE_DIR,数据库在项目路径下生成
    },
}

4、使用配置文件动态连接数据库

在MyDjango目录下创建配置文件my.cnf,写入MySOL数据库的连接信息。

[client]客户端设置,即客户端默认的连接参数
[client]
database=django_db
user=root
password=1234
host=127.0.0.1
port=3306

在settings.py写配置信息。default--OPTIONS--read_default_file中设置配置文件my.cnf的路径,Django读取配置文件my.cnf的数据库连接信息,连接数据库。

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {'read_default_file':str(BASE_DIR / 'my.cnf')},
    },

}

在MyDjango的urls.py中设置路由index,路由的视图函数indexView()在项目应用index的view.py中定义。

from django.urls import path
from django.contrib import admin
from index.views import index  # 导入项目应用index
# 项目的urls文件
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',index,name='index'),
]

在项目应用index的view.py中定义路由index的视图函数indexView()。

 indexView()读取并输出Django内置函数ContentType的数据,请求响应的内容为templates文件夹的app_index.html

from django.shortcuts import render
from django.contrib.contenttypes.models import ContentType
def indexView(request):
    c=ContentType.objects.values_list().all()
    print(c)
    return render(request,'app_index.html')

app_index.html


"en">

    "UTF-8">
    Hello


    Hello World!!

python manage.py migrate

 python manage.py runserver 8001

5、通过SSH隧道远程连接MySQL

 先在SSH栏设置,然后在常规栏设置。

 

 pip install sshtunnel

 下载sshtunnel,通过SSH方式连接到目标服务器,生成服务器的SSH连接对象,在settings.py文件的DATABASES中设置数据库连接

# ssh_:实现SSH连接目标服务器,在sshtunnel模块中使用

# 数据库服务器的ip地址或主机名
ssh_host = "192.168.xx.xx"
# 数据库服务器的SSH连接端口号,一般都是22,必须是数字
ssh_port = 22
# 数据库服务器的用户名
ssh_user = "root"
# 数据库服务器的用户密码
ssh_password = "1234"

# mysql_:在目标服务器基础上连接MySQL数据库,在配置属性DATABASES和sshtunnel模块中均被使用

# 数据库服务器的mysql的主机名或ip地址
mysql_host = "localhost"
# 数据库服务器的mysql的端口,默认为3306,必须是数字
mysql_port = 6603
# 数据库服务器的mysql的用户名
mysql_user = "root"
# 数据库服务器的mysql的密码
mysql_password = "1234"
# 数据库服务器的mysql的数据库名
mysql_db = "mydjango"

# 分别定义服务器的SSH连接信息和数据库的连接信息
# 定义服务器的SSH连接函数get_ssh(),使用sshtunnel模块的open_tunnel函数实现,并设置相应的函数参数
from sshtunnel import open_tunnel
def get_ssh():
    server = open_tunnel(
        (ssh_host, ssh_port),
        ssh_username=ssh_user,
        ssh_password=ssh_password,
        # 绑定服务器的MySQL数据库
        remote_bind_address=(mysql_host, mysql_port))#remote_bind_address是绑定服务器的MySQL数据库
    # ssh通道服务启动
    server.start()
    return str(server.local_bind_port)
# 在DATABASES的PORT中调用get_ssh(),Django就会连接到服务器的MySQL数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': mysql_db,
        'USER': mysql_user,
        'PASSWORD': mysql_password,
        'HOST': mysql_host,
        'PORT': get_ssh(),
    }
}