Tirando datos a la plantilla desde una base de datos externa con django

Voy a intentar construir una aplicación web donde los usuarios puedan visitar una url, iniciar sesión y ver informes y otra información. Sin embargo, los datos de los informes se almacenan en una base de datos externa. Es una base de datos MySQL a la que voy a tener acceso.

He investigado un poco en google y no he tenido mucha suerte en encontrar ejemplos. He leído un poco acerca de cómo conectarse a múltiples bases de datos: https://docs.djangoproject.com/en/dev/topics/db/multi-db/ Parece que puedo conectarme a la base de datos.

La siguiente parte es donde estoy atrapado. Los datos en la base de datos serán actualizados todo el tiempo. No quiero poder editar la información, tampoco quiero sobrescribir nada. Solo quiero poder conectarme a la base de datos, obtener la información requerida y luego verla a través de la plantilla para que el usuario pueda verla. En primer lugar, porque los datos se actualizan todo el tiempo, ¿va a ser un problema? (¡Espero que no!)

Una vez que me haya conectado a la base de datos, ¿qué es lo mejor para poder extraer los datos y luego colocarlos en un formato que pueda enviar a la plantilla? ¿Debería importar los datos a los modelos y luego controlarlos con la vista? ¿O necesitaría convertir los datos con JSON o XML?

Soy bastante nuevo en python / django, por lo que cualquier ayuda sería muy apreciada. Si necesita más información por favor pregunte y gracias de antemano. 🙂

¡No hay problema! Hago esto todo el tiempo.

En cuanto a “no editar o actualizar los datos”, simplemente no agregue nada a su aplicación que actualice los datos. La sugerencia de Salem sobre el uso de permisos en el lado de MySQL también es una buena idea.

Para recuperar los datos, tienes dos opciones:

1) Puede crear modelos Django que correspondan a sus tablas en la base de datos MySQL. Puede hacerlo manualmente o puede usar el comando “inspectdb” con manage.py para obtener un buen punto de partida. Entonces haz algo como esto:

def myview(request): rows = MyModel.objects.using('mysql').all() return render_to_response("mytemplate.html", {"rows" : rows }) 

2) Puede administrar las conexiones y consultas manualmente dentro de su aplicación. Esto es perfectamente válido dentro de una vista:

 def myview(request): conn = MySQLdb.connect("connection info here") try: cursor = conn.cursor() cursor.execute("select * from mytable") rows = cursor.fetchall() finally: conn.close() return render_to_response("mytemplate.html", {"rows" : rows}) 

Finalmente, Django está perfectamente feliz de usar MySQL como una base de datos. Podría simplificar las cosas si su DBA le permite a Django crear sus tablas en la misma base de datos.

No habrá ningún problema si los datos se están actualizando.

Ahora para recuperar los datos de la base de datos, primero tiene que importar el modelo en cuestión en sus vistas

 from app_name.models import model_name def view_report(request): r_name=request.POST.get('r_name','default_value') r=model_name.objects.get(report_name=r_name) return render_to_response('url',{'r':r}) 

En tu plantilla

 {{r.report_desc}} 

Para que su acceso a la base de datos sea de “solo lectura”, creo que la mejor opción es crear un uso limitado en el lado de MySQL con solo SELECCIONAR:

 GRANT SELECT ON target_database.* TO your_user@'your_host' IDENTIFIED BY 'your_password'; 

Esto asegurará que en cualquier caso una actualización / alteración tendrá éxito.

Por lo general, modela las tablas de la base de datos como objetos porque esto facilita el trabajo con los registros de la base de datos de Python y le brinda cierta abstracción, pero puede ejecutar consultas de SQL sin formato si cree que esto es lo correcto.

Dependiendo de cómo desee presentar sus datos, es posible que deba convertirlos en algo.

Si desea que su aplicación sea más dinámica (por ejemplo, recuperar datos nuevos en intervalos de 10 segundos y presentarlos al usuario sin actualizaciones) probablemente necesitará convertirlos a algún formato más adecuado para usar con AJAX, como JSON o XML (Django tiene algunas herramientas de serialización listas para ser utilizadas). Si solo desea una aplicación “estática” (es decir: el usuario hace clic en un enlace / botón y va a una página donde se presentan los datos, y para actualizarlos, el usuario debe actualizar la página) puede utilizar los objetos recuperados de la base de datos. en su opinión