Mapping columns distinctly from attribute names
This is similar to the first example with a small change. The attribute names mentioned in this example are different than the column names. This is possible by providing an additional parameter inside the `Column()` method. The method’s first argument takes in the actual column name which allows using different attribute names for referring to these columns. If we look at the final `print()` method, the first name of the first record in the actor table is referenced using the `fname` attribute as opposed to the `first_name` or actual column name seen in the first example.
Python3
import sqlalchemy as db from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() # MAPPING TABLE ACTOR class Actor(Base): __tablename__ = 'actor' id = db.Column( 'actor_id' , db.SmallInteger, autoincrement = True , primary_key = True ) fname = db.Column( 'first_name' , db.String( 45 ), nullable = False ) lname = db.Column( 'last_name' , db.String( 45 ), nullable = False ) update_on = db.Column( 'last_update' , db.TIMESTAMP, nullable = False ) # DEFINE THE ENGINE (CONNECTION OBJECT) engine = db.create_engine( "mysql+pymysql://root:password@localhost/sakila" ) # CREATE A SESSION OBJECT TO INITIATE QUERY IN DATABASE from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind = engine) session = Session() # SELECT * FROM sakila.actor LIMIT 1; result = session.query(Actor).first() # DISPLAY FIRST NAME OF FIRST RECORD IN ACTOR TABLE print ( "First Name (Record 1):" , result.fname) |
Output:
First Name (Record 1): PENELOPE
SQLAlchemy – Mapping Table Columns
In this article, we will see how to map table columns using SQLAlchemy in Python.
You will need a database (MySQL, PostgreSQL, SQLite, etc) to work with. Since we are going to use MySQL in this post, we will also install a SQL connector for MySQL in Python. However, none of the code implementations changes with change in the database except for the SQL connectors.
pip install pymysql
We will use the sample sakila database from MySQL. All the examples covered in this article will make use of the actor table within the sakila database. If you do not have the sakila database and want to follow along with this article without installing it then use the SQL script present in the link mentioned below to create the required schema and actor table along with the records.
Databased Used: Sakila Actor Table Script
We will be referring to the same SQL query in each of the examples mentioned below –
SELECT first_name FROM sakila.actor LIMIT 1;
The different ways in which we can map the columns in SQLAlchemy are –
- Mapping columns directly to the attribute names
- Mapping columns distinctly from attribute names
- Mapping columns using reflection
- Mapping columns using a prefix
Contact Us