Django入门到放弃之数据库配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | settings: DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'homework1009' , 'USER' : 'root' , 'PASSWORD' : 'xxxxx' , 'HOST' : '192.168.1.128' , 'PORT' : '3306' , 'DEFAULT_CHARSET' : 'utf-8' , 'OPTIONS' : { 'init_command' : 'SET sql_mode=STRICT_TRANS_TABLES' , } } } # 注意设置MySQL数据库为utf8 项目同名目录__init__.py import pymysql pymysql.install_as_MySQLdb() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # sql_pool.py import pymysql # from DBUtils.PooledDB import PooledDB 1.x版本使用 from dbutils.pooled_db import PooledDB # 2.x版本使用 POOL = PooledDB( creator = pymysql, # 使用链接数据库的模块 maxconnections = 6 , # 连接池允许的最大连接数,0和None表示不限制连接数 mincached = 2 , # 初始化时,链接池中至少创建的空闲的链接,0表示不创建 maxcached = 5 , # 链接池中最多闲置的链接,0和None不限制 maxshared = 3 , # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。 blocking = True , # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错 maxusage = None , # 一个链接最多被重复使用的次数,None表示无限制 setsession = [], # 开始会话前执行的命令列表。 ping = 0 , # ping MySQL服务端,检查是否服务可用。 host = '127.0.0.1' , # 以下配置也可单独在配置文件中配置 port = 3306 , user = 'root' , password = '123' , database = 'luffy' , charset = 'utf8' ) # app.py from sql_pool import POOL conn = POOL.connection() # 从连接池种取一个链接(如果没有,阻塞在这) curser = conn.cursor() curser.execute( 'select * from luffy_order where id<2' ) res = curser.fetchall() print (res) |
修改数据库的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | DATABASES = { 'default' : { # 写(主机) 'ENGINE' : 'django.db.backends.mysql' , # 数据库引擎 'HOST' : '192.168.103.158' , # 数据库主机 'PORT' : 3306 , # 数据库端口 'USER' : 'admin' , # 数据库用户名 'PASSWORD' : '111111' , # 数据库用户密码 'NAME' : 'robot' # 数据库名字 }, 'slave' : { # 读(从机) 'ENGINE' : 'django.db.backends.mysql' , 'HOST' : '192.168.103.158' , 'PORT' : 8306 , 'USER' : 'root' , 'PASSWORD' : '222222' , 'NAME' : 'robot' } } |
创建和配置数据库读写路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # app01/db_router.py class MasterSlaveDBRouter( object ): """数据库读写路由""" def db_for_read( self , model, * * hints): """读""" return "slave" def db_for_write( self , model, * * hints): """写""" return "default" def allow_relation( self , obj1, obj2, * * hints): """是否运行关联操作""" return True |
配置数据库读写路由
1 | DATABASE_ROUTERS = [ 'app01.db_router.MasterSlaveDBRouter' ] # 注意路径 |
1 2 3 4 5 6 7 8 9 10 | 1.settings 中添加多个salve数据库配置 2. 创建和配置数据库读路由 import random class MasterSlaveDBRouter( object ): """数据库读写路由""" def db_for_read( self , model, * * hints): """读""" salve_list = [' ',' '] # 存放配置salve名称的列表 return random.choice(salve_list) |
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-08-27 Linux 五种IO模型