Python 对数据库中已存在的表作ORM操作的两种方法

版权声明:本文为博主原创文章,欢迎转载,但请注明原文出处。 https://blog.csdn.net/GiveMeFive_Y/article/details/80455978

数据库表结构如下:
table

第一种方式:

代码如下:

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://root:[email protected]:3306/test')
Base = automap_base()
Base.prepare(engine, reflect=True)
db = sessionmaker(bind=engine)()
Student = Base.classes.student
ret = db.query(Student).first()
print(ret.__table__)

结果:

(Table('student', MetaData(bind=None), Column('id', BIGINT(display_width=20), table=<student>, primary_key=True, nullable=False), 
Column('name', CHAR(length=16), table=<student>),
Column('teacher_id', INTEGER(display_width=11), table=<student>), schema=None),)

第二种方式:

# pip install sqlacodegen
# sqlacodegen mysql+pymysql://root:[email protected]:3306/test > models.py

# sqlacodegen mysql+pymysql://root:[email protected]:3306/test > models.py

生成的models.py如下:

# coding: utf-8
from sqlalchemy import BIGINT, CHAR, Column, INTEGER
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
metadata = Base.metadata


class Student(Base):
    __tablename__ = 'student'

    id = Column(BIGINT(), primary_key=True)
    name = Column(CHAR(16))
    teacher_id = Column(INTEGER())


class Teacher(Base):
    __tablename__ = 'teacher'

    id = Column(BIGINT(), primary_key=True)
    name = Column(CHAR(16))
    phone = Column(CHAR(16))

接下来就跟正常的ORM操作一样啦!

猜你喜欢

转载自blog.csdn.net/GiveMeFive_Y/article/details/80455978