【Python入门】44.数据库之 使用SQLAlchemy

摘要:教你如何使用SQLAlchemy创建数据库表


*写在前面:为了更好的学习python,博主记录下自己的学习路程。本学习笔记基于廖雪峰的Python教程,如有侵权,请告知删除。欢迎与博主一起学习Pythonヽ( ̄▽ ̄)ノ *


数据库

使用SQLAlchemy

在Python中,我们要表示一个表格内容的话,可以用list表示,像这样:

[
    ('1', 'Ming'),
    ('2', 'Hong'),
    ('3', 'Leo')
]

这是一个user表,包含了id和name。

但是这样用tuple表示一行,很难看出表的结构,我们可以class实例来表示:

class User(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

[
    User('1', 'Ming'),
    User('2', 'Hong'),
    User('3', 'Leo')
]

这种把关系数据库的表结构映射到对象上的技术就是**ORM(Object-Relational Mapping)**技术。

执行这种转换的框架就是ORM框架。

SQLAlchemy就是一种ORM框架,我们来看一下如何使用SQLAlchemy。

首先,在命令提示符中输入pip安装SQLAlchemy:

pip install sqlalchemy

然后,我们试一下用SQLAlchemy来创建一个user表。

第一步,导入SQLAlchemy:

from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

第二步,创建User对象:


Base = declarative_base()          # 创建对象的基类

class User(Base):
    __tablename__ ='user'                # 表的名字

    id = Column(String(20), primary_key=True)         # 表的结构
    name = Column(String(20))

这里declarative_base()是用来创建对象的基类。

第三步,初始化数据库连接和DBSession:

engine = create_engine('mysql+pymysql://root:jianhui123@localhost:3306/test')
DBSession = sessionmaker(bind=engine)

create_engine()用来初始化数据库连接,紧跟的字符串含义为:

'数据库类型+数据库驱动名称://用户名:密码@机器地址:端口号/数据库名'

这里只需要修改用户名和密码即可。

第四步,添加数据:

session = DBSession()                            # 创建session对象:
new_user = User(id='4', name='Mike')             # 创建User对象:
session.add(new_user)                            # 把User对象添加到session中
session.commit()                                 # 提交session
session.close()

可以看到,我们想要添加数据的话,只需要创建对应的对象,然后添加到session中,最后把session提交并关闭即可。

至此,我们成功使用SQLAlchemy创建了一个user表。

如果想要查询数据的话,可以通过query查询,具体如下:

session = DBSession()
user = session.query(User).filter(User.id=='4').one()
print(user.name)
session.close()

这里filter()表示条件,one()表示返回唯一行。

执行结果:

Mike

在关系数据库中,会有一对多、多对多的关系,相应的,ORM框架也可以提供一对多、多对多等功能。

例如,在User表中,一个user有一个id、一个name和多个score,那么可以这样定义:

class User(Base):
    __tablename__ = 'user'
    id = Column(String(20), primary_key=True)
    name = Column(String(20))

    score = relationship('Score')                    # 创建一对多关系

class Score(Base):
    __tablename__ = 'score'

    id = Column(String(20), primary_key=True)
    math_score = Column(Integer)                       # 数学成绩
    english_score = Column(Integer)                    # 英语成绩
    chinese_score = Column(Integer)                    # 语文成绩
    
    user_id = Column(String(20), ForeignKey('user.id'))      # 通过外键user_id连接到User表

当我们查询一个User对象时,该对象的score属性就会返回一个包含多个Score对象的list。

ORM框架的作用就是把数据库表的每一行数据与每一个对象对应起来,互相转换。


以上就是本节的全部内容,感谢你的阅读。

下一节内容:Web开发

有任何问题与想法,欢迎评论与吐槽。

和博主一起学习Python吧( ̄▽ ̄)~*

猜你喜欢

转载自blog.csdn.net/lecorn/article/details/82776285