Mostrando entradas con la etiqueta Unidad 3. Mostrar todas las entradas
Mostrando entradas con la etiqueta Unidad 3. Mostrar todas las entradas

viernes, 3 de mayo de 2019

Unidad 3 Configuración y administración del espacio en disco.(Investigacion)

Configuración y administración del espacio en disco.




Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien definidos que deben ser conocidos para poder comprender la forma en la que se almacenan los datos. Vamos a ver la diferencia entre bloque, extensión, segmento y espacio de tablas.





3.1 Estructuras lógicas de almacenamiento

Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien definidos que deben ser conocidos para poder comprender la forma en la que se almacenan los datos. Vamos a ver la diferencia entre bloque, extensión, segmento y espacio de tablas.

Bloques: Se tratan de la unidad más pequeña. Generalmente debe múltiple del tamaño de bloque del sistema operativo, ya que es la unidad mínima que va a pedir Oracle al sistema operativo. Si no fuera múltiple del bloque del sistema se añadiría un trabajo extra ya que el sistema debería obtener más datos de los estrictamente necesarios. Se especifica mediante DB_BLOCK_SIZE

Extensiones: Se forma con uno o más bloques. Cuando se aumenta tamaño de un objeto se usa una extensión para incrementar el espacio.

Segmentos: Grupo de extensiones que forman un objeto de la base de datos, como por ejemplo una tabla o un índice.

Espacio de tablas:Formado por uno o más datafiles, cada datafile solo puede pertenecer a un determinado tablespace





En general, el almacenamiento de los objetos de la base de datos (tablas e índices fundamentalmente) no se realiza sobre el archivo o archivos físicos de la base de datos, sino que se hace a través de estructuras lógicas de almacenamiento que tienen por debajo a esos archivos físicos, y que independizan por tanto las sentencias de creación de objetos de las estructuras físicas de almacenamiento. Esto es útil porque permite que a esos "espacios de objetos " les sean asociados nuevos dispositivos físicos (es decir, más espacio en disco) de forma dinámica cuando la base de datos crece de tamaño más de lo previsto. Posibilita además otra serie de operaciones como las siguientes:

Ø  Asignar cuotas específicas de espacio a usuarios de la base de datos.

Ø  Controlar la disponibilidad de los datos de la base de datos, poniendo fuera de uso alguno de esos espacios de tablas individualmente.

Ø  Realizar copias de seguridad o recuperaciones parciales de la base de datos.

Ø  Reservar espacio para almacenamiento de datos de forma cooperativa entre distintos dispositivos.

El administrador de la base de datos puede crear o borrar nuevos espacios lógicos de objetos, añadir o eliminar ficheros físicos de soporte, utilizados como espacio temporal de trabajo, definir parámetros de almacenamiento para objetos destinados a ese espacio de datos, todos los gestores relacionales que venimos introduciendo como ejemplos siguen esta filosofía. En el caso de Oracle, sobre los ficheros físicos de datos (datafiles) se definen los tablespaces. Por lo tanto, una base de datos Oracle se compone lógicamente de tablcspaccs, y físicamente de datafilcs. Su creación es sencilla, con la sentencia GREAT'', TABLESPACE: CREATE TABLESPACE usuarios DATAFILE `datal.ora' SIZE 50M

También es sencillo ampliar el espacio destinado a un tablespace utilizando el comando ALTER TABLESPACE:

ALTER TABLESPACE usuarios ADD DATAFILE 'data2.ora' SIZE 25M

Para hacer más grande una base de datos, las opciones disponibles son tres:
Cada base de datos contiene un tablespace llamado SYSTEM que es creado automáticamente al crear la base de datos. Contiene las tablas del diccionario de datos para la base de datos en cuestión. Es recomendable no cargar datos de usuario en SYSTEM, para dejarlos como espacio de objetos del sistema. Si además los datos de usuario están en tablespaces sitos en otros dispositivos, el rendimiento mejorará porque las tablas del diccionario de datos se acceden frecuentemente y por lo tanto son un cuello de botella potencial desde el punto de vista del acceso a disco. A la hora de estimar el espacio necesario para cl tablespace sys-nsm hay que tener en cuenta que las unidades de programación PL-SQL (entorno de programación SQL proporcionado por Oracle) almacenadas en la base de datos (procedimientos, paquetes, disparos y funciones) almacenan sus datos en SYSTEM.
De acuerdo con lo comentado anteriormente, tablas e índices se ubicarán en el tablespaee indicado en el momento de su creación con la correspondiente sentencia CREATE. Si no se dice nada, se situarán en el tablespace por defecto asociado al usuario creador.



3.1.1. Definición de espacio de almacenamiento

Las bases de datos suelen ser creadas para almacenar grandes cantidades de datos de forma permanente. Por lo general, los datos almacenados en éstas suelen ser consultados y actualizados constantemente.

La mayoría de las bases de datos se almacenan en las llamadas memorias secundarias, especialmente discos duros, aunque, en principio, pueden emplearse también discos ópticos, memorias flash, etc.

Las razones por las cuales las bases de datos se almacenan en memorias secundarias son:
En cuanto al respaldo de las bases de datos (ver backup), suelen emplearse tanto discos duros, como cintas magnéticas, discos ópticos o similares.
Las técnicas empleadas para almacenar bases de datos son sumamente importantes para la velocidad de acceso y recuperación de datos. Las técnicas dependen del tipo de almacenamiento, el uso que se le da o se le dará a la base de datos, la estructura de la misma, el SGBD empleado, etc.

Esta dependencia no significa necesariamente que haya que cambiar la estructura de la base de datos si se cambian las técnicas empleadas. Las técnicas de almacenamiento son independientes de la base de datos, pero, de todas maneras, las mejores técnicas muchas veces pueden determinarse viendo la estructura de la base de datos, entre otras características.


Los encargados de elegir estas técnicas son los diseñadores y administradores de bases de datos, y dependen también de las capacidades del SGBD. En general, el SGBD ofrece diferentes opciones y técnicas para organizar los datos.

La idea es que los encargados de la base de datos encuentren las técnicas idóneas, o sea, aquellas que permitan la mayor velocidad posible de acceso a los datos. Una mala decisión en esta área puede resultar en una menor velocidad de acceso a la base de datos, o en un uso excesivo del espacio de almacenamiento, o incluso, puede aumentar la velocidad de consulta de una base de datos, pero disminuir la velocidad de actualización de la misma.




3.1.2. Definición y creación del espacio asignado para cada base de datos

Las bases de datos se almacenan en ficheros o archivos. Existen diferentes formas de organizaciones primarias de archivos que determinan la forma en que los registros de un archivo se colocan físicamente en el disco y, por lo tanto, cómo se accede a éstos.

Las distintas formas de organizaciones primarias de archivos son:

Existe una segunda forma de acceder a los datos llamada organización secundaria o estructura de acceso auxiliar. Estas permiten que los accesos a los registros de un archivo basado en campos alternativos, sean más eficientes que los que han sido utilizados para la organización primaria de archivos.
El DBMS asigna espacio de almacenamiento a las bases de datos cuando los usuarios introducen create database o alter database. El primero de los comandos puede especificar uno o más dispositivos de base de datos, junto con la cantidad de espacio en cada uno de ellos que será asignado a la nueva base de datos.
Si se utiliza la palabra clave default o se omite completamente la cláusula on , el DBMS pone la base de datos en uno o más de los dispositivos predeterminados de base de datos especificados en master..sysdevices

Para especificar un tamaño (en este ejemplo, 4MB) para una base de datos que se va a almacenar en una ubicación predeterminada, utilice on default = size de esta forma:

create database newpubs   on default = 4



Para situar la base de datos en dispositivos específicos, dé el nombre del dispositivo o dispositivos en que desea almacenarla. Como la sintaxis indica, puede solicitar que se almacene en más de un dispositivo de base de datos, con una cantidad de espacio diferente en cada uno. Todos los dispositivos mencionados en create database deben estar enumerados en sysdevices . En otras palabras, deben haberse inicializado con disk init .

La instrucción siguiente crea la base de datos newdb y asigna 3MB en mydata y 2MB en newdata . Como en el ejemplo anterior, la base de datos y el diario de transacciones no se separan:

create database newdb on mydata = 3, newdata = 2



Warning! A menos que cree una base de datos pequeña o que no sea crucial, sitúe siempre el diario en un dispositivo de base de datos aparte.

Si la cantidad de espacio solicitada a un dispositivo específico de base de datos no está disponible, el DBMS crea la base de datos con tanto espacio como sea posible en cada dispositivo y muestra un mensaje informando el espacio asignado en cada uno. (Esto no se considera un error.) Si hay menos espacio del mínimo necesario para una base de datos en el dispositivo especificado (o en el predeterminado, si no se especifica un nombre), el comando create database falla.


3.1.4 Particiones

Una partición es una división de una base de datos lógica o sus elementos constituyentes en partes independientes. La partición de bases de datos se hace normalmente por razones de mantenimiento, rendimiento o manejo.
Una aplicación popular y favorable es en un Sistema de Administración de Base de Datos Distribuida. Cada partición puede ser extendida hasta múltiples nodos, y los usuarios en el nodo pueden hacer transacciones locales en la partición. Esto aumenta el rendimiento en sitios que tienen transacciones regularmente involucrando ciertas vistas de datos, y manteniendo la disponibilidad y la seguridad.
Esta partición puede hacerse creando bases de datos más pequeñas separadas (cada una con sus propias tablas, índices, y registros de transacciones) o dividiendo elementos seleccionados, por ejemplo, solo una tabla.

Partición horizontal consiste en poner diferentes filas en diferentes tablas. Por ejemplo, clientes con códigos postales menores que 50000 están almacenados en la tabla ClientesEste, mientras que los clientes con códigos postales mayores o iguales a 50000 están almacenados en la tabla ClientesOeste. Las dos tablas de partición son entonces ClientesEste y ClientesOeste, mientras que una vista con una unión podría ser creada con las dos tablas para poder dar una vista completa de todos los clientes.
Partición vertical consiste en crear miles de tablas con miles de columnas y crear tablas para poner las columnas restantes.
Se puede particionar una tabla de 5 maneras diferentes:
Por rango: para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual
ALTER TABLE contratos
PARTITION BY RANGE(YEAR(fechaInicio)) (
      PARTITION partDecada50 VALUES LESS THAN (1960),
      PARTITION partDecada60 VALUES LESS THAN (1970),
      PARTITION partDecada70 VALUES LESS THAN (1980),
      PARTITION partDecada80 VALUES LESS THAN (1990),
      PARTITION partDecada90 VALUES LESS THAN (2000),
      PARTITION partDecada00 VALUES LESS THAN (2010),
      PARTITION partDecada10 VALUES LESS THAN MAXVALUE
);
Por listas: para construir nuestras particiones especificamos listas de valores concretos.
ALTER TABLE contratos
PARTITION BY LIST(YEAR(fechaInicio)) (
PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959),
PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),
PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979),
PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989),
PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999),
PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009),
PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016,
2017, 2018, 2019)
);


Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
ALTER TABLE contratos
PARTITION BY HASH(YEAR(fechaInicio))
PARTITIONS 7;

Por clave: similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
ALTER TABLE contratos
PARTITION BY KEY()
PARTITIONS 7;

Compuesta: podemos combinar los distintos métodos de particionado y crear particiones de particiones
Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)
EXPLAIN SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'



select_type
table
type
key
rows
Extra
SIMPLE
contratos
ALL
239796
Using where


Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)
EXPLAIN PARTITIONS SELECT COUNT(*)
FROM contratos                  

WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'


select_type
table
partitions
type
key
rows
Extra
SIMPLE
contratos
partDecada50
ALL
8640
Using where


El número de tuplas que MySQL tiene que comprobar se ve disminuido en 2 órdenes de magnitud.

3.1.5 Espacios privados

Un «espacio privado» permite que los administradores y redactores gestionen el conjunto de datos del sitio. Algunas bases de datos tienen estos espacios privados llamados comúnmente paneles de control, que son formularios que aparecen al abrir la base de datos.
Los paneles de control sirven de "puerta principal" o "recibidor" de una base de datos en el sentido de que dirigen a las personas hacia determinadas tareas, como introducir o buscar datos. Sirven también para mantener alejados a los usuarios de las tablas que contienen los datos en tiempo real.
Cuando reciba una base de datos, debe adentrarse más allá del panel de control para averiguar cómo están estructurados los datos, pero merece la pena echar un vistazo inicial al panel de control. Le puede ofrecer algún indicio sobre las tareas que el diseñador de la base de datos consideró que realizarían los usuarios habitualmente con los datos.
Puede hacer clic en los vínculos del panel de control para ver qué objetos, como formularios e informes, abren.


3.1.6 Espacios para objetos
Espacios Para Objetos
Los DBMS se basan en archivos para almacenar datos, y estos archivos, o conjuntos de datos, residen en medios de almacenamiento, o dispositivos. Una buena parte del trabajo del DBA implicará la planificación para el almacenamiento real de la base de datos.


Algunas tecnologías de almacenamiento son más adecuadas que otras. Sin embargo, la naturaleza mecánica de la unidad de disco los hace más vulnerables al fracaso de los componentes de otro equipo. Además, las formas en que las unidades de disco son utilizados por las bases de datos pueden hacer que la gestión del almacenamiento impredecibles, como la barra lateral "Modern DBMS de uso de disco“ Puede usarse RAID para mejorar la seguridad de los datos.



Para aplicaciones de misión crítica la integridad de los datos puede ser más importante que la disponibilidad de datos. Si el soporte es poco fiable y un fallo de las causas de corrupción de datos, los datos perdidos puede ser más de un problema que el tiempo de inactividad. Es imperativo, por tanto, que las soluciones de almacenamiento de base de datos para protegerlos a toda costa. La recuperación de datos desde medios de almacenamiento lleva mucho más tiempo en completarse que la recuperación de datos desde la memoria caché o la memoria.

El rendimiento de la base de datos depende de la entrada y salida a disco. La cantidad de datos almacenados es mayor que nunca antes, y los datos se almacenados por más tiempo.

Algunos DBMS permiten al tamaño de los archivos temporales de expandirse y contraerse de forma automática. Dependiendo del tipo y la naturaleza de las operaciones de base de datos en proceso, esta fluctuación puede provocar picos de uso del disco

El crecimiento de la capacidad de almacenamiento aumenta aún más la complejidad de la gestión de datos y bases de datos. Muchas organizaciones están implementando nuevas tecnologías de almacenamiento, tales como almacenamiento en red (NAS) y redes de área de almacenamiento (SAN), para ayudar a controlar la cantidad cada vez mayor de almacenamiento necesario para los usos modernos. La gestión del almacenamiento en el entorno dinámico de hoy es una tarea difícil DBA.

Hay muchos problemas de almacenamiento que deben ser resueltos antes de que un DBA pueda crear una base de datos. Uno de los temas más importantes es la cantidad de espacio para permitir la base de datos.

El cálculo espacial debe tener en cuenta no sólo tablas, índices, sino también, y dependiendo del DBMS, el registro de transacciones. Cada una de estas entidades probablemente requerirá un archivo separado o conjunto de datos, para el almacenamiento persistente.

3.2. Segmentos

Un  segmento contiene un tipo específico de objetos de la base de datos, como por ejemplo una tabla. Un segmento está compuesto de extensiones que definen el tamaño disponible para el segmento. A medida que se llenan las extensiones se van añadiendo nuevas extensiones, es aquel espacio reservado por la base de datos, dentro de un datafile, para ser utilizado por un solo objeto. Así una tabla (o cualquier otro objeto) está dentro de su segmento, y nunca podrá salir de él, ya que si la tabla crece, el segmento también crece con ella.

Físicamente todo objeto en base de datos no es más que un segmento dentro de un datafile. Se puede decir que, un segmento es a un objeto de base de datos, lo que un datafile a un tablespace; el segmento es la representación física del objeto en base de datos (el objeto es solo una definición lógica).

Los segmentos son los equivalentes físicos de los objetos que almacenan datos. El uso efectivo de los segmentos requiere que el DBA conozca los objetos, que utiliza una aplicación, cómo los datos son introducidos en esos objetos y el modo en que serán recuperados.

Un segmento está constituido por secciones llamadas extensiones, que son conjuntos contiguos de bloques. Una vez que una extensión existente en un segmento no puede almacenar más datos, el segmento obtendrá del espacio de tabla otra extensión. Este proceso de extensión continuará hasta que no quede más espacio disponible en los ficheros del espacio de tablas, o hasta que se alcance un número máximo de extensiones por segmento.

Existen 5 tipos de segmento:
Ø  •De datos.
Ø  •De índices.
Ø  •De rollback.
Ø  •Temporales.
Ø  •De bootstrap.
3.3. Memoria Compartida.

La memoria compartida contiene todos los datos intervenidos, como:

Ø  Grupo de memorias intermedias
Ø  Tabla de bloqueos
Ø  Memoria intermedia del registro, que contiene las entradas del registro que esperan a ser volcadas en el almacenamiento estable
Ø  Planes de consulta en caché, que se pueden reutilizar si se envía de nuevo la misma consulta

La exclusión mutua se puede implementar por medio de funciones del sistema operativo llamadas semáforos. Implementaciones alternativas, con menos sobrecargas, utilizan instrucciones atómicas especiales soportadas por el hardware de la computadora; un tipo de instrucción atómica comprueba una posición de la memoria y la establece a uno automáticamente. Los mecanismos de exclusión mutua también se utilizan para implementar pestillos.

3.4. Instancias múltiples
Se llama instancia múltiple al hecho de poder ejecutar un programa más de una vez al mismo tiempo. Hay programas que no admiten más que una sola instancia, es decir que si ya se está ejecutando, por más que lo cliquees de nuevo en el icono o en el menú no aparecerá un nuevo ejemplar del programa. Con las bases de datos se complica un poco porque si un usuario modifica un registro que otro usuario tiene también abierto, la modificación que se haga en una instancia debe reflejarse de inmediato (actualizarse) en cualquier otra instancia abierta de la misma base de datos.
Sin embargo, en las bases de datos se puede seleccionar la opción en el diseño de la BD, y se reflejarán de inmediato las modificaciones en todas las instancias abiertas
En programación, una instancia se produce con la creación de un objeto perteneciente a una clase (se dice que se instancia la clase). El objeto que se crea tiene los atributos, propiedades y métodos de la clase a la que pertenece. Los objetos y sus características se usan en la construcción de programas, ya sea como contenedores de datos o como partes funcionales del programa. Los objetos también puede ser ocurrencia de las clases.



lunes, 1 de abril de 2019

3. Proyecto Universidad | App GestionAcademica

Proyecto Universidad con app GestionAcademica

Empecemos por crear el proyecto Universidad y aplicación GestionAcademica, utiliza el comando:

Para crear proyecto:


django-admin startproject nombre_proyecto

Para crear aplicación:


django-admin startapp nombre_app



Damos de alta la app GestionAcademica en la sección Universidad/settings/INSTALLED_APPS, así indicamos que nuestra app trabaje con el proyecto, agrega lo siguiente:




Modelo

Ahora creamos el modelo que contiene tres tablas Alumno, Curso y Matricula


Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
# Create your models here.

class Alumno(models.Model):
    ApellidoPaterno = models.CharField(max_length= 35)
    ApellidoMaterno = models.CharField(max_length= 35)
    Nombres = models.CharField(max_length= 35)
    DNI = models.CharField(max_length= 8)
    FechaNacimiento = models.DateField()
    SEXOS = (('F','Femenino'),('M','Masculino'))
    sexo = models.CharField(max_length= 1,choices= SEXOS, default='M')

    def NombreCompleto(self):
        cadena="{0} {1} , {2}"
        return cadena.format(self.ApellidoPaterno,self.ApellidoMaterno,self.Nombres)

    def __str__(self):
        return self.NombreCompleto()


class Curso(models.Model):
    Nombre = models.CharField(max_length= 50)
    Creditos = models.PositiveSmallIntegerField(default= 1)
    Estado = models.BooleanField(default= True)
    def __str__(self):
        return "{0} -> ({1})".format(self.Nombre,self.Creditos)


class Matricula(models.Model):
    Alumno = models.ForeignKey(Alumno,null= False,blank = False,on_delete=models.CASCADE)
    Curso = models.ForeignKey(Curso,null= False,blank = False,on_delete=models.CASCADE)
    FechaMatricula = models.DateTimeField(auto_now_add = True)

    def __str__(self):
        cadena="{0} inscrito en: {1}"
        return cadena.format(self.Alumno,self.Curso.Nombre)




Dimos formato de presentación con el metodo __str__



Con esto se presentara con "nombre del curso" seguido de total de "créditos".



Ahora en Universidad/admin.py se agrega los modelos.

Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin

# Register your models here.
from.models import Alumno
from.models import Curso
from.models import Matricula


admin.site.register(Alumno)
admin.site.register(Curso)
admin.site.register(Matricula)



Una vez terminado, vamos a crear los modelos y migrar.


python manage.py makemigrations



python manage.py migrate



Ahora si corremos el servidor con el comando python manage.py runserver



Haz creado con éxito en tu navegador ingresa a la siguiente dirección http://127.0.0.1:8000/.


Para administrar, modificar y agregar los datos en nuestra base de datos, vamos a crear un superusuario.

python manage.py createsuperuser 



De nuevo corre el servidor y ve a http://127.0.0.1:8000/admin, con tu usuario y contraseña que registraste.



Visualizamos nuestra aplicación con nuestros 3 modelos.

Tablas

Nos quedara de esta manera:

Alumno
Con el método __str__


Como podemos ver utilizamos el método y visualizamos en el orden que vemos.



Curso







Matricula











domingo, 31 de marzo de 2019

3. Aplicación egresados


Realizamos la creación de un proyecto alumnos y aplicación egresados. 

Comando: django-admin startproject nombre_proyecto


Comando: django-admin startproject nombre_aplicacion




Una vez hecho esto, realiza el modelo en el editor pycharm como se muestra y agregamos a installed_apps 'egresados' la app:

Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
class egresados(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True, null=False,
                                verbose_name="Numero de control")
    Nombre = models.CharField(max_length=50)
    Apellido = models.CharField(max_length=30)
    SEXO = (('F', 'Femenino'), ('M', 'Masculino'), ('N','Ninguno'))
    sexo = models.CharField(max_length=1, choices = SEXO, default ='ninguno')
    Edad = models.IntegerField(help_text='Mayor de Edad')
    Fecha_nacimiento = models.DateField()
    CARRERA_CHOICES = (
    ('CP','Contador Publico'),
    ('IA','Ing. Ambiental'),
    ('IC','Ing. Civil'),
    ('IE','Ing. Electronica'),
    ('IME', 'Ing. Electromecanica'),
    ('ISC', 'Ing. en Sistemas Comp.'),
    ('IGE', 'Ing. en Gestion Empresarial.'),
    ('LAE', 'Lic. en Administración de Empresas'),
    ('IE','Ing. Quimica'),
    ('IM', 'Ing. Mecatronica')
    )
    carrera_choices = models.CharField(max_length=35, choices=CARRERA_CHOICES, default='IS')
    Activo = models.BooleanField(verbose_name= 'Trabaja actualmente',help_text='Marca si es asi')
    Trabajo = models.BooleanField(verbose_name= 'Trabaja en el area de su carrera')
    Lugar_de_trabajo = models.CharField(max_length=50, null = True, default='Ninguno')
    Ingreso_Mensual = models.IntegerField(null = True)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()
    Foto = models.ImageField(db_column="image",upload_to=BASE_DIR+"/media/imagenes",
                             verbose_name="Subir Imagen",default="")
    Archivo = models.FileField(db_column="File",upload_to= BASE_DIR+"/media/archivos",
                             verbose_name="Subir Archivo", default="")


Editor:




Para que nos guarde la imagen en una carpeta, se ingresa el siguiente código en alumnos/settings.py, puede ir al final mientras no interfiere con el resto:

Código:

MEDIA_ROOT = '/'
MEDIA_URL = '/media/'



Para tener el url y ver la imagen, en alumnos/urls.py:

Código:


from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

if settings.DEBUG:
   urlpatterns+= static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)





Para crear el modelo, por consola ejecutamos los siguientes comandos:


 python manage.py makemigrations


python manage.py migrate



No olvides agregar el modelo en egresados/admin.py, se agrega en esta ocasiona el 

código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin

from.models import egresados
admin.site.register(egresados)





Ya terminado, ahora corremos el servidor:

python manage.py runserver

Ve a la dirección: http://127.0.0.1:8000/admin/, y accede. No olvides crear usuario por consola con el siguiente comando:

python manage.py createsuperusuario





Como se muestra ya esta nuestro modelo 'egresados'.



Registramos datos:



Opciones que se muestran, en caso del campo sexo, si no seleccionamos, entonces por default se queda en ninguno.



Para subir una imagen o archivo:









Ya tenemos en carpetas separadas lo que va en Imagen y Archivo.


Se muestra una dirección donde esta la imagen o archivo, damos click se abre la imagen.


Nos redirige y podemos verla en el navegador.


3. Tipos de campos y atributos

Campos



TIPO DE CAMPOS EN MODELOS
TIPO DE CAMPODESCRIPCIÓN
CharFieldTipo de campo para cadena de caracteres alfanuméricos
TextFieldSe usa para cadenas de longitud grande o arbitraria.
IntegerFieldCampo para almacenar valores de números enteros y para validar los valores introducidos como enteros en los formularios
DataField y DataTimeFieldSe utilizan para guardar/representar fechas e información de fecha/hora.
EmailFieldSe usa para validar direcciones de correo electrónico
FileField e ImageFieldSe usan para subir ficheros e imágenes. Solo ImageField añade una validación adicional de que el fichero subido es una imagen
AutoFieldTipo de campo especial de IntegerField que se incrementa automáticamente. Cuando no especificamos una clave primaria para el modelo, se añade automáticamente una de este tipo
ForeignKeySe utiliza para especificar una relación uno a muchos con otro modelo de la base de datos
ManyToManyFieldSe usa para especificar una relación muchos a muchos.
BinaryFieldUn campo para guardar datos binarios. Solo soporta asignación de bytes
BooleanFieldCampo de verdadero/falso
CommaSeparatedIntegerFieldCampo de enteros separados por comas. Así como en el campo CharField, se requiere el argumento max_length
DecimalFieldUn campo preciso de números decimales, representado en python como una instancia decimal. Requiere los argumentos max_digits y decimal_places.
FilePathFieldUn CharField que sus opciones son limitadas a los nombres de archivos en ciertas direcciones en el sistema.
SlugFieldSlug es un termino de periódico. Un Slug es una etiqueta corta para algo, conteniendo solo letras, números,guiones bajos o guiones. Son usados generalmente en las URLs
URLFieldCampo de tipo CharField para una URL.
OneToOneFieldUna relación de uno a uno. Conceptualmente, esto es similar a una ForeignKey con el argumento unique=True.




Atributos




PARÁMETROS EN MODELOS
PARÁMETRO     DESCRIPCIÓN
max_lengthEstablece la longitud máxima del valor de este campo
help_textProporciona una etiqueta de texto para mostrar que ayuda a los usuarios a saber que colocar en el campo
verbose_nameModifica el nombre del campo a mostrar
defaultValor por efecto para el campo. Puede ser un valor o un callable object(objeto que puede ser llamada como una funcion)
nullSi es True, Django guardara valores en blanco o vacíos como NULL. Por defecto es FALSE
blankSi es True, se permite que el campo quede en blanco en los formularios. El valor por defecto es False, lo que significa que la validación de formularios de Django te forzara a introducir un valor.
choicesUn grupo de valores de selección para este campo
primary_keySi es True, establece el campo actual como clave primaria para el modelo. Si no se especifica ningún campo como clave,Django añadirá automáticamente un campo para este propósito
editableSi es falso, el campo no se desplegara en el apartado de admin o en cualquier otra forma. También se saltara durante la validacion del modelo. Por defecto es True
uniqueSi es True, el campo deberá ser único en toda la tabla
auto_now_addse utiliza con DataField y DataTimeField para establecer solo la fecha cuando se crea el modelo por primera vez
auto_nowSi es True, establece en el campo la fecha actual cada vez que se guarda el modelo. Se utiliza con DataField o DataTimeField
set_nullEstablece un campo como NULL
on_deleteDefine que ocurre cuando un registro asociado se borra. Se utiliza con MannyToManyField
pathRequerido en FilePathField. La dirección de donde el campo obtendrá sus opciones "/hime/images"

jueves, 28 de marzo de 2019

2. Proyecto alumnos: Cambios en el modelo (parte 2)

Modificación del modelo

Tipos de Campos, atributos (argumentos)

Un modelo puede tener un número arbitrario de campos, de cualquier tipo.

Previamente se había creado un proyecto Alumnos con aplicación datos_per, en esta ocasión se le agregará cambios en el modelo.


Original

Código:


# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Datospersonales(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True)
    Nombre = models.CharField(max_length=50)
    Sexo = models.CharField(max_length=1)
    Edad = models.IntegerField()
    Fecha_nacimiento = models.DateField()
    Carrera = models.CharField(max_length=30)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()





Se creo un modelo en datos_per/models, con los siguientes tipos de campos, el modelo tiene lo siguiente:


Tipos de campos

  • CharField se usa para definir cadenas de longitud corta a media. Debes especificar la max_length (longitud máxima) de los datos que se guardarán.
  • TextField se usa para cadenas de longitud grande o arbitraria. Puedes especificar una max_length para el campo, pero sólo se usa cuando el campo se muestra en formularios (no se fuerza al nivel de la base de datos).
  • IntegerField es un campo para almacenar valores de números enteros y para validar los valores introducidos como enteros en los formularios.
  • DateField y DateTimeField se usan para guardar/representar fechas e información fecha/hora (como en los objetos Python datetime.date  y datetime.datetime, respectivamente). Estos campos pueden adicionalmente declarar los parámetros (mutuamente excluyentes) auto_now=True (para establecer el campo a la fecha actual cada vez que se guarda el modelo), auto_now_add (para establecer sólo la fecha cuando se crea el modelo por primera vez), y default (para establecer una fecha por defecto que puede ser sobreescrita por el usuario).
  • EmailField se usa para validar direcciones de correo electrónico.
  • FileField e ImageField se usan para subir ficheros e imágenes respectivamente (el ImageField añade simplemente una validación adicional de que el fichero subido es una imagen). Éstos tienen parámetros para definir cómo y donde se guardan los ficheros subidos.
  • AutoField es un tipo especial de IntegerField que se incrementa automáticamente. Cuando no especificas una clave primaria para tu modelo, se añade -automáticamente- una de éste tipo.
  • ForeignKey se usa para especificar una relación uno a muchos con otro modelo de la base de datos (ej. un coche tiene un fabricante, pero un fabricante puede hacer muchos coches). El lado "uno" de la relación es el modelo que contiene la clave.
  • ManyToManyField se usa para especificar una relación muchos a muchos (ej. un libro puede tener varios géneros, y cada género puede contener varios libros). En nuestra aplicación de la biblioteca usaremos ésta de forma muy similar a ForeignKeys, pero pueden usarse de formas más complicadas para describir las relaciones entre grupos. Éstas tienen el parámetro on_delete para definir que ocurre cuando un registro asociado se borra (ej. un valor de models. SET_NULL establecería simplemente el valor a NULL).
  • BooleanField: permite guardar información del tipo verdadero o falso, en la base de datos se guarda respectivamente un 1 (verdadero) o un 0 (falso) según corresponda. Este campo se despliega en pantalla como un checkbox.
  • DurationField: permite agregar tiempos de duración en formato de Días horas: minutos: segundos eje 3 d 2:20:20 esto es 3 días con 20h con 20m y 20 segundos.
  • EmailField: permite introducir correos electrónicos, este campo es verificado automáticamente por django
  • URLField: permite almacenar direcciones de Internet.
  • FilePathField: permite almacenar una ruta a un archivo en el disco local del servidor, en pantalla es mostrado como una lista desplegable donde aparecen los nombres de cada archivo.

Argumentos de los campos

  • help_text: Proporciona una etiqueta de texto para formularios HTML (ej. en el sitio de Administración), tal como se describe arriba.
  • verbose_name: Nombre de fácil lectura que se usa en etiquetas para el campo. Si no se especifica, Django inferirá el valor por defecto del verbose name a partir del nombre del campo. Establece el nombre de la etiqueta
  • default: Valor por defecto para el campo. Puede ser un valor o un callable object (objeto que puede ser llamado como una función), en cuyo caso el objeto será llamado cada vez que se cree un nuevo registro.
  • null: Si es True, Django guardará valores en blanco o vacíos como NULL en la base de datos para campos donde sea apropiado (un CharField guardará una cadena vacía en su lugar). Por defecto es False, permite que el campo sea guardado en la base sin contenido ingresado por el usuario y en la base de datos se guardara NULL como valor.
  • blank: Si es True, se permite que el campo quede en blanco en tus formularios. El valor por defecto es False, lo que significa que la validación de formularios de Django te forzará a introducir un valor. Con frecuencia se usa con null=True, porque si vas a permitir valores en blanco, también querrás que la base de datos sea capaz de representarlos de forma apropiada.
  • choices: Un grupo de valores de selección para este campo. Si se proporciona, el widget correspondiente por defecto del formulario será una caja de selección con estos valores de selección en vez del campo de texto estándar.
  • primary_key: Si es True, establece el campo actual como clave primaria para el modelo (Una clave primaria es una columna especial de la base de datos, diseñada para identificar de forma única todos los diferentes registros de una tabla). Si no se especifica ningún campo como clave primaria, Django añadirá automáticamente un campo para este propósito.
  • db_column: establece el nombre que puede ser asignado a la columna de la tabla en la base de datos
  • unique: permite la verificación del campo en la BD, de manera que no puedan introducirse valores repetidos.

Para campos de texto:

  • max_lenght: establece el maximo de caracteres que el campo puede admitir.

Para campos de archivo:
  • upload_to: establece la ruta en disco donde el servidor deberá guardar los archivos subidos a la plataforma.

Para campos con numéricos decimales:
  • max_digits: establece el máximo de cifras permitidas por el campo
  • decimal_places: establece el máximo de cifras decimales permitidas por el campo.


Nuevo

Código:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Datospersonales(models.Model):
    Num_cont = models.CharField(max_length=10, primary_key=True, verbose_name='Número de control')
    Nombre = models.CharField(max_length=50)
    SEXO = (('F', 'Femenino'), ('M', 'Masculino') )#arreglo
    #Sexo = models.CharField(max_length=1, choices=SEXO)
    Edad = models.IntegerField(help_text='Solo mayores de edad')
    Fecha_nacimiento = models.DateField()
    #Lista de Opciones en un Campo:
    #Carrera = models.CharField(max_length=30, choices=carrera_choices,default = IS,)
    IS = 'IS'
    LC = 'LC'
    LAE = 'LAE'
    CARRERA_CHOICES = (('IS', 'Ing. en Sistemas'),
   ('IS', 'Ing. en Sistemas'), ('LAE', 'Lic. en Administración de empresas'))
    carrera_choices = models.CharField(max_length=7, choices = CARRERA_CHOICES, default = IS)
    Telefono = models.CharField(max_length=12)
    email = models.EmailField()
    Domicilio = models.TextField()




Al correr el servidor.

Mensaje de help_text


Lista de carreras.



El modelo consta de los siguientes campos:

Num_cont es un campo CharField que guarda cadena de caracteres alfanuméricos, cuenta con el argumento max_length que establece la longitud del campo, primary_key = True establece como clave primaria y verbose_name = 'Nombre del campo etiqueta'.
En el campo sexo es una arreglo con dos opciones F y M.
Tenemos un arreglo con varias de las carreras, con choice para la selección, valor por default.
help_text permite dar un mensaje de restricciones o advertencia.


Después de haber realizado las modificaciones correspondientes, en consola, realizamos una migración con el comando, creamos el modelo :


python manage.py makemigrations





Se muestra que se removió Carrera, pero ahora esta establecida se agrego como arreglo carrera_choices, se realizo cambios en Edad y Num_cont.

Y finalmente creamos las tablas correspondientes en la base de dato que tengamos dada de alta en el apartado database en el archivo settings:


python manage.py migrate




Ahora podemos seguir agregando mas opciones de carrera, en el arreglo para dr





Ejecutamos el comando:


Vemos la actualización de carrera_choices. Ahora se migra lo últimos cambios.


Ahora corremos el servidor para ver los cambios.







Referencias:

https://developer.mozilla.org/es/docs/Learn/Server-side/Django/Models 

https://www.evernote.com/shard/s663/client/snv?noteGuid=fb8bb589-ac4e-47a1-820b-0c11ac1c5e0a&noteKey=8fccea01ec279129&sn=https%3A%2F%2Fwww.evernote.com%2Fshard%2Fs663%2Fsh%2Ffb8bb589-ac4e-47a1-820b-0c11ac1c5e0a%2F8fccea01ec279129&title=django%2BAlumnos

Unidad 3 Configuración y administración del espacio en disco.(Investigacion)

Configuración y administración del espacio en disco. Para la gestión del almacenamiento de una base de datos existen 4 conceptos bien ...