I\'m going to attempting to build a web app where users can visit a url, login and view reports and other information. However the data for the reports are stored in an exte
To make your access to the database "read only", I guess the best option is to create a limited used in the MySQL side with only SELECT:
GRANT SELECT ON target_database.* TO your_user@'your_host' IDENTIFIED BY 'your_password';
This will make sure that in any case an update/alter will succeed.
Usually you model your database tables as objects because this makes it easier to work with database records from Python and gives you some abstraction, but you can execute raw SQL queries if you feel this is the right thing to do.
Depending on how you want to present your data, you may need to convert it to something.
If your want to make your application more dynamic (for example, retrieving new data in 10 seconds intervals and presenting it to the user without refresh) you probably will need to convert it to some format more suitable to be used with AJAX, like JSON or XML (Django has some serialization tools ready to be used). If you just want a "static" application( ie: user clicks in a link/button and goes to a page where data is presented, and to be refreshed user has to refresh the page) you can use the objects as retrieved from the database in your view.