Django
Configuración de la base de datos
Buscar..
MySQL / MariaDB
Django soporta MySQL 5.5 y superior.
Asegúrese de tener algunos paquetes instalados:
$ 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
Además de uno de los controladores MySQL de Python ( mysqlclient
la opción recomendada para Django):
$ pip install mysqlclient # python 2 and 3
$ pip install MySQL-python # python 2
$ pip install pymysql # python 2 and 3
La codificación de la base de datos no puede ser configurada por Django, pero debe configurarse en el nivel de la base de datos. Busque el
default-character-set
en my.cnf (o/etc/mysql/mariadb.conf/*.cnf
) y configure la codificación:
[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
Configuración de la base de datos para MySQL o 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 está utilizando el conector MySQL de Oracle, su línea ENGINE
debería tener este aspecto:
'ENGINE': 'mysql.connector.django',
Cuando cree una base de datos, asegúrese de que para especificar la codificación y la intercalación:
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin
Desde MySQL 5.7 en adelante y en nuevas instalaciones de MySQL 5.6, el valor predeterminado de la opción sql_mode contiene STRICT_TRANS_TABLES . Esa opción convierte las advertencias en errores cuando los datos se truncan al insertarlos. Django recomienda encarecidamente la activación de un modo estricto para MySQL para evitar la pérdida de datos (STRICT_TRANS_TABLES o STRICT_ALL_TABLES). Para habilitar agregar a /etc/my.cnf
sql-mode = STRICT_TRANS_TABLES
PostgreSQL
Asegúrese de tener algunos paquetes instalados:
sudo apt-get install libpq-dev
pip install psycopg2
Configuraciones de la base de datos para 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',
}
}
En versiones anteriores también puede usar el alias django.db.backends.postgresql_psycopg2
.
Cuando uses Postresql tendrás acceso a algunas características adicionales:
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 es el predeterminado para Django. No debe utilizarse en producción ya que suele ser lento.
#myapp/settings/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db/development.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
}
Accesorios
Los accesorios son datos iniciales para la base de datos. La forma más sencilla cuando ya tiene algunos datos existentes es usar el comando 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)
Esto creará un archivo json que puede ser importado nuevamente usando
./manage.py loaddata databasedump.json
Al usar el loadddata
sin especificar un archivo, Django buscará una carpeta de fixtures
en su aplicación o la lista de directorios provista en FIXTURE_DIRS
en la configuración, y usará su contenido en su lugar.
/myapp
/fixtures
myfixtures.json
morefixtures.xml
Los posibles formatos de archivo son: JSON, XML or YAML
Ejemplo de JSON de 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"
}
}
]
Ejemplo de 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
Ejemplo XML de accesorios:
<?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>
Motor Django Cassandra
- Instala pip:
$ pip install django-cassandra-engine
- Agregue Getting Started to INSTALLED_APPS en su archivo settings.py:
INSTALLED_APPS = ['django_cassandra_engine']
- Configuración de BASES DE DATOS Cange 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 crea nuevo usuario 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
}
}
}
}