Django
Database-instelling
Zoeken…
MySQL / MariaDB
Django ondersteunt MySQL 5.5 en hoger.
Zorg ervoor dat sommige pakketten zijn geïnstalleerd:
$ 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
Evenals een van de Python MySQL-stuurprogramma's ( mysqlclient
de aanbevolen keuze voor Django):
$ pip install mysqlclient # python 2 and 3
$ pip install MySQL-python # python 2
$ pip install pymysql # python 2 and 3
De databasecodering kan niet door Django worden ingesteld, maar moet op databaseniveau worden geconfigureerd. Zoek naar
default-character-set
in my.cnf (of/etc/mysql/mariadb.conf/*.cnf
) en stel de codering in:
[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
Databaseconfiguratie voor MySQL of 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',
}
}
Als u de MySQL-connector van Oracle gebruikt, ziet uw ENGINE
lijn er als volgt uit:
'ENGINE': 'mysql.connector.django',
Let er bij het maken van een database op dat u de codering en sortering opgeeft:
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin
Vanaf MySQL 5.7 en bij nieuwe installaties van MySQL 5.6 bevat de standaardwaarde van de optie sql_mode STRICT_TRANS_TABLES . Die optie escaleert waarschuwingen tot fouten wanneer gegevens worden afgekapt bij het invoegen. Django beveelt ten zeerste aan om een strikte modus voor MySQL te activeren om gegevensverlies te voorkomen (STRICT_TRANS_TABLES of STRICT_ALL_TABLES). Toevoegen toevoegen aan /etc/my.cnf
sql-mode = STRICT_TRANS_TABLES
PostgreSQL
Zorg ervoor dat sommige pakketten zijn geïnstalleerd:
sudo apt-get install libpq-dev
pip install psycopg2
Database-instellingen voor 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',
}
}
In oudere versies kunt u ook de alias django.db.backends.postgresql_psycopg2
.
Wanneer u Postresql gebruikt, hebt u toegang tot enkele extra functies:
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 is de standaardwaarde voor Django. Het zou niet in productie moeten worden gebruikt aangezien het gewoonlijk langzaam is.
#myapp/settings/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db/development.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
}
Wedstrijden
Armaturen zijn initiële gegevens voor de database. De meest eenvoudige manier om reeds bestaande gegevens te gebruiken, is om de opdracht 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)
Hiermee maakt u een json-bestand dat opnieuw kan worden geïmporteerd met behulp van
./manage.py loaddata databasedump.json
Wanneer u de loadddata
zonder een bestand op te geven, zoekt Django een map met fixtures
in uw app of de lijst met mappen in de FIXTURE_DIRS
in instellingen en gebruikt in plaats daarvan de inhoud.
/myapp
/fixtures
myfixtures.json
morefixtures.xml
Mogelijke bestandsindelingen zijn: JSON, XML or YAML
Voorbeeld J Fixtures:
[
{
"model": "myapp.person",
"pk": 1,
"fields": {
"first_name": "John",
"last_name": "Lennon"
}
},
{
"model": "myapp.person",
"pk": 2,
"fields": {
"first_name": "Paul",
"last_name": "McCartney"
}
}
]
YAML-voorbeeld:
- model: myapp.person
pk: 1
fields:
first_name: John
last_name: Lennon
- model: myapp.person
pk: 2
fields:
first_name: Paul
last_name: McCartney
Armaturen XML-voorbeeld:
<?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>
Django Cassandra-motor
- Installeer pip:
$ pip install django-cassandra-engine
- Voeg Beginnen toe aan INSTALLED_APPS in je instellingen.py-bestand:
INSTALLED_APPS = ['django_cassandra_engine']
- Cange DATABASES instelling 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 maakt nieuwe gebruiker cqlsh aan:
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
}
}
}
}