摘要:教你如何使用SQLAlchemy创建数据库表
*写在前面:为了更好的学习python,博主记录下自己的学习路程。本学习笔记基于廖雪峰的Python教程,如有侵权,请告知删除。欢迎与博主一起学习Pythonヽ( ̄▽ ̄)ノ *
目录
数据库
使用SQLAlchemy
数据库
使用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吧( ̄▽ ̄)~*