If you're learning Flask and want to connect it to an Oracle database, this post walks through a real, working example — line by line, in plain English.
Install the required packages.
pip install flask
pip install flask_sqlalchemy
pip install oracledb
We will user simple application code of data entry form which will insert data into database
The browser never talks directly to Oracle.
Instead:
- Browser sends data to Flask.
- Flask processes the request.
- SQLAlchemy creates database commands.
python-oracledbsends those commands to Oracle.- Oracle stores the data.
Flask Oracle DB flow
Browser (form submit)
↓
Flask route (/contact)
↓
Python object (FlaskBlogContact)
↓
SQLAlchemy (translates to SQL)
↓
oracledb driver (speaks Oracle's protocol)
↓
Oracle DatabaseBelow is my code , will explain you step by step
1. The Imports
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import oracledb- Flask — the web framework itself.
- flask_sqlalchemy — lets us talk to the database using Python objects instead of raw SQL.
- oracledb — Oracle's official Python driver. This is the piece that actually knows how to speak to an Oracle database.
2. Setting Up the Oracle Client
oracledb.init_oracle_client(lib_dir=r"C:\instantclient_21_11")Oracle databases need a special set of driver files called Instant Client to connect properly (this is different from MySQL or PostgreSQL, which don't need this step). This line tells Python: “here's where those driver files live on my computer.” Without it, the connection would fail.
3. The Database Connection String
app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle+oracledb://hr:hr@orcl.com:1522/?service_name=orcl'This one line has everything Flask needs to find and log into the database. Breaking it down:
db = SQLAlchemy(app)This hands the connection info to SQLAlchemy, which becomes your toolkit for reading and writing data without writing raw SQL.
4. Defining a Table as a Python Class
class FlaskBlogContact(db.Model):
__tablename__ = 'flask_blog_contact'
contact_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(1000), nullable=False)
email_address = db.Column(db.String(2000), unique=True)
phone_number = db.Column(db.String(2000), nullable=False)
message = db.Column(db.String(2000), nullable=False)
creation_date = db.Column(db.Date, default=datetime.utcnow)This is called an ORM model (Object-Relational Mapping). Instead of writing:
INSERT INTO flask_blog_contact (...)…you write a Python class, and SQLAlchemy translates it into a table for you. Each attribute (name, email_address, etc.) becomes a column. primary_key=True marks contact_id as the unique row identifier, and nullable=False means that field can't be left empty.
5. The Routes (Pages of the Site)
@app.route('/')
def disp():
return render_template('index.html')Simple pages like /, /home, /about, and /post just render an HTML template — no database involved.
6. Where the Database Actually Gets Used
@app.route('/contact', methods=['GET','POST'])
def contact():
if request.method == 'POST':
name = request.form.get('name')
email = request.form.get('email')
phone = request.form.get('phone')
message = request.form.get('message')
entry = FlaskBlogContact(name=name, email_address=email, phone_number=phone, message=message)
db.session.add(entry)
db.session.commit()
return render_template('contact.html')This is the real action. Here's what happens step by step when someone submits the contact form:
- GET request → just shows the empty contact form (
contact.html). - POST request (form submitted) → Flask grabs each field with
request.form.get(...). entry = FlaskBlogContact(...)creates a new Python object representing one row.db.session.add(entry)stages that row to be saved (like putting it in a shopping cart).db.session.commit()actually writes it to the Oracle database — this is the line that runs theINSERTbehind the scenes.
You never wrote SQL yourself — SQLAlchemy converted your Python object into an Oracle INSERT statement automatically.
0 Comments