Django
Configuration de la base de données
Recherche…
MySQL / MariaDB
Django supporte MySQL 5.5 et supérieur.
Assurez-vous d'avoir quelques paquets installés:
$ sudo apt-get install mysql-server libmysqlclient-dev
$ sudo apt-get install python-dev python-pip # for python 2
$ sudo apt-get install python3-dev python3-pip # for python 3
Ainsi que l'un des pilotes MySQL Python ( mysqlclient
recommandé pour Django):
$ pip install mysqlclient # python 2 and 3
$ pip install MySQL-python # python 2
$ pip install pymysql # python 2 and 3
L'encodage de la base de données ne peut pas être défini par Django, mais doit être configuré au niveau de la base de données. Recherchez le jeu de caractères par
default-character-set
dans my.cnf (ou/etc/mysql/mariadb.conf/*.cnf
) et définissez l'encodage:
[mysql]
#default-character-set = latin1 #default on some systems.
#default-character-set = utf8mb4 #default on some systems.
default-character-set = utf8
...
[mysqld]
#character-set-server = utf8mb4
#collation-server = utf8mb4_general_ci
character-set-server = utf8
collation-server = utf8_general_ci
Configuration de la base de données pour MySQL ou MariaDB
#myapp/settings/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'USER': 'DB_USER',
'PASSWORD': 'DB_PASSWORD',
'HOST': 'localhost', # Or an IP Address that your database is hosted on
'PORT': '3306',
#optional:
'OPTIONS': {
'charset' : 'utf8',
'use_unicode' : True,
'init_command': 'SET '
'storage_engine=INNODB,'
'character_set_connection=utf8,'
'collation_connection=utf8_bin'
#'sql_mode=STRICT_TRANS_TABLES,' # see note below
#'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
},
'TEST_CHARSET': 'utf8',
'TEST_COLLATION': 'utf8_general_ci',
}
}
Si vous utilisez le connecteur MySQL d'Oracle, votre ligne ENGINE
doit ressembler à ceci:
'ENGINE': 'mysql.connector.django',
Lorsque vous créez une base de données, assurez-vous que pour spécifier l'encodage et le classement:
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin
Depuis MySQL 5.7 et les nouvelles installations de MySQL 5.6, la valeur par défaut de l'option sql_mode contient STRICT_TRANS_TABLES . Cette option escalade les avertissements en erreurs lorsque les données sont tronquées lors de l'insertion. Django recommande vivement d'activer un mode strict pour MySQL afin d'éviter toute perte de données (STRICT_TRANS_TABLES ou STRICT_ALL_TABLES). Pour activer ajouter à /etc/my.cnf
sql-mode = STRICT_TRANS_TABLES
PostgreSQL
Assurez-vous d'avoir quelques paquets installés:
sudo apt-get install libpq-dev
pip install psycopg2
Paramètres de base de données pour PostgreSQL:
#myapp/settings/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myprojectDB',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
Dans les anciennes versions, vous pouvez également utiliser l'alias django.db.backends.postgresql_psycopg2
.
Lorsque vous utilisez Postresql, vous aurez accès à certaines fonctionnalités supplémentaires:
Modelfields:
ArrayField # A field for storing lists of data.
HStoreField # A field for storing mappings of strings to strings.
JSONField # A field for storing JSON encoded data.
IntegerRangeField # Stores a range of integers
BigIntegerRangeField # Stores a big range of integers
FloatRangeField # Stores a range of floating point values.
DateTimeRangeField # Stores a range of timestamps
sqlite
sqlite est la valeur par défaut pour Django. Il ne doit pas être utilisé en production car il est généralement lent.
#myapp/settings/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db/development.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
}
Agencements
Les fixations sont des données initiales pour la base de données. Lorsque vous avez déjà des données existantes, la méthode la plus simple consiste à utiliser la commande dumpdata
./manage.py dumpdata > databasedump.json # full database
./manage.py dumpdata myapp > databasedump.json # only 1 app
./manage.py dumpdata myapp.mymodel > databasedump.json # only 1 model (table)
Cela créera un fichier json qui pourra être réimporté en utilisant
./manage.py loaddata databasedump.json
Lorsque vous utilisez le loadddata
sans spécifier de fichier, Django recherchera un dossier de fixtures
dans votre application ou la liste des répertoires fournis dans les paramètres FIXTURE_DIRS
, et utilisera son contenu à la place.
/myapp
/fixtures
myfixtures.json
morefixtures.xml
Les formats de fichiers possibles sont: JSON, XML or YAML
Exemple de JSON de luminaires:
[
{
"model": "myapp.person",
"pk": 1,
"fields": {
"first_name": "John",
"last_name": "Lennon"
}
},
{
"model": "myapp.person",
"pk": 2,
"fields": {
"first_name": "Paul",
"last_name": "McCartney"
}
}
]
Exemple de montage YAML:
- model: myapp.person
pk: 1
fields:
first_name: John
last_name: Lennon
- model: myapp.person
pk: 2
fields:
first_name: Paul
last_name: McCartney
Exemple XML de luminaires:
<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
<object pk="1" model="myapp.person">
<field type="CharField" name="first_name">John</field>
<field type="CharField" name="last_name">Lennon</field>
</object>
<object pk="2" model="myapp.person">
<field type="CharField" name="first_name">Paul</field>
<field type="CharField" name="last_name">McCartney</field>
</object>
</django-objects>
Moteur Django Cassandra
- Installez pip:
$ pip install django-cassandra-engine
- Ajoutez Getting Started à INSTALLED_APPS dans votre fichier settings.py:
INSTALLED_APPS = ['django_cassandra_engine']
- Réglage de Cange DATABASES Standart:
Standart
DATABASES = {
'default': {
'ENGINE': 'django_cassandra_engine',
'NAME': 'db',
'TEST_NAME': 'test_db',
'HOST': 'db1.example.com,db2.example.com',
'OPTIONS': {
'replication': {
'strategy_class': 'SimpleStrategy',
'replication_factor': 1
}
}
}
}
Cassandra crée un nouvel utilisateur cqlsh:
DATABASES = {
'default': {
'ENGINE': 'django_cassandra_engine',
'NAME': 'db',
'TEST_NAME': 'test_db',
'USER_NAME'='cassandradb',
'PASSWORD'= '123cassandra',
'HOST': 'db1.example.com,db2.example.com',
'OPTIONS': {
'replication': {
'strategy_class': 'SimpleStrategy',
'replication_factor': 1
}
}
}
}