Django MySQL 資料庫連線

2022-06-29 17:45:14 字數 2474 閱讀 5569

django 1.11 官方文件

conn_max_age 定義資料庫連線時限(all)

default:0 儲存在每個請求結束時關閉資料庫連線的歷史行為。

none:保持長連線

other:xx 單位秒

連線管理
django連線發生在每次請求時,如果沒有可用連線便主動建立連線,如果限制了連線時間的話。

警告
每個執行緒包含自己的資料庫連線,資料庫必須支援至少和工作執行緒一樣多的同步連線;

有時出現大多數檢視無法訪問資料庫,此時應當試圖減少資料庫保持連線時間,這樣不會有意地維護連線,同時有助於減少資料庫同步連線數;

開發伺服器會為每個處理的連線創立新的執行緒,會使長連線失效;

當django建立乙個連線時會設定適當的引數(取決於被使用的後端),如果使能長連線,這些設定便不會在每個請求重複設定,但是如果你定義了比如連線隔離或時區,就應在每次連線斷開後還原預設配置,強制寫入適當的值或者禁用長連線。

django 預設假設所有資料庫均採用utf-8編碼。支援mysql 5.5+,期望資料庫支援utf-8編碼和事務和參照完整性。

推薦引擎---innodb

mysqldb 原生驅動已被開發支援超過10年(不支援python3);

mysqlclient mysqldb的衍生,支援python3(django mysql推薦api);

mysqlclient 1.3.3+,推薦此api

mysql connector/python 純python驅動(oracle,支援python3),無須mysql客戶端庫和python其他標準庫;

mysql connector/python 1.1.x+

使用django 時區支援,mysql_tzinfo_to_sql載入時區表至mysql資料庫。

sql語句:

create database character set utf8;

排序規則

排序規則用於列序控制,可以設定資料庫範圍級別或單獨表/單獨列級別的排序規則,django不提供模型設定排序,可手動修改資料庫表進行修改。

預設utf-8資料庫,mysql採用utf8_general_ci排序規則(預設大小寫不敏感,插入『a』和『a』會視為一樣),如果想區分大小寫,請採用utf8_bin排序規則。

utf8_general_ci 排序快有一些誤差

utf8_unicode_ci 排序稍慢相對準確

連線設定採用優先順序:

options選項

name,user,password,host,port

mysql配置

# settings.py

databases = ,

}}# my.cnf

[client]

database = name

user = user

password = password

default-character-set = utf8

設定sql_mode
strict_trans_tables/strict_all_tables

django 強烈建議啟用strict mode(此模式會將插入時的truncate警告公升級為錯誤,以此來防止資料丟失)

隔離等級isolation level

當執行併發負載時,資料庫會處理不同的回話可能會相互影響。相互影響方式由每個回話的處理隔離等級決定。在資料庫配置檔案options中設定isolation_level,有效的設定值如下:

django 在'read committed'工作好於mysql預設'repeatable read'。

建立表提前設定好資料庫儲存引擎

表名推薦使用小寫

字元域字元域預設為最大255字元,如果使用unique=true將會影響字元域。

textfield 限制

textfield不能標記為 unique=true

小數秒在time和datatime field被支援

要求mysql 5.6.4+

timestamp 列

如果資料庫包含timestamp列,必須設定use_tz = false來避免衝突,如果你使能為true,則inspectdb會對映這些列到datetimefield,mysql和django都將會嘗試從utc到local time轉換這些值。

mysql不支援nowait和skip locked,

故select_for_update() is used with nowait=true or skip_locked=true then a databaseerror will be raised.

django mysql資料庫配置

python 3.7.0 django 2.0 pymysql 0.9.3 一 配置資料庫 django預設資料庫為sqlite 若該專案要使用mysql資料庫,需要更改配置 1 專案下setting.py中新增如下 import pymysql pymysql.install as mysqldb...

資料庫重連

4.2.10 資料庫自動重連 dbcp使用apache的物件池objectpool作為連線池的實現,在構造genericobjectpool時,會生成乙個內嵌類evictor,實現自runnable介面。如果 timebetweenevictionrunsmillis大於0,每過 timebetwe...

Django mysql資料遷移

1.配置資料庫連線 根據自己的資料庫來配置即可 2.在資料庫中新建乙個庫,名稱跟上一步設定的name中的庫名稱一致即可。3.匯入pymysql模組 4.使用models建立表,先建立兩個模型user,group 根據自己的業務需求建立不同的模型即可 如下圖所示 5.在需要用的模型的地方,匯入建立的模...