数据库
首页 > 数据库> > SQLAlchemy基础

SQLAlchemy基础

作者:互联网

SQLAlchemy概述

安装

[root@localhost packages]#	pip3 install sqlalchemy

简介

架构在这里插入图片描述

ORM模型

[
	('1',	'Michael'),
	('2',	'Bob'),
	('3',	'Adam')
]
class	User(object):
def __init__(self,	id,	name):
self.id =	id
self.name =	name
[
	User('1',	'Michael'),
	User('2',	'Bob'),
	User('3',	'Adam')
]

数据库对象管理

连接mysql
[root@bogon bin]# mysql -uroot -p123456
MariaDB [(none)]>	create	database TestDB default	charset	utf8;
>>>	from sqlalchemy import create_engine
>>>	engine	= create_engine(
'mysql+pymysql://root:123456@localhost/TestDB?charset=utf8',
encoding='utf8',
echo=True
)
//echo=True表示将日志输出到终端屏幕,默认为False
声明映射
>>>	from	sqlalchemy.ext.declarative import	declarative_base
>>>	Base	=	declarative_base()
创建映射类
>>>	from sqlalchemy import	Column,	Integer, String
>>>	class Departments(Base):
...			__tablename__	=	'departments'
...			dep_id =	Column(Integer,	primary_key=True)
...			dep_name =	Column(String(20))
...			def __repr__(self):
...				return	<Department(dep_name='%s')>"%self.dep_name
//__repr__是可选项
创建架构
>>>	Departments.__table__
Table('departments',	MetaData(bind=None),	Column('dep_id',	Integer(),	
table=<departments>,	primary_key=True,	nullable=False),	
Column('dep_name',	String(),	table=<departments>),	schema=None)
>>>	Base.metadata.create_all(engine)
创建映射类的实例
dep_dev = Departments(dep_name='developments')
print(dep_dev.dep_name)
print(str(dep_dev.dep_id))
创建会话类
>>>	from sqlalchemy.orm import	sessionmaker
>>>	Session	= sessionmaker(bind=engine)
如果在创建session前还未创建engine,操作如下
>>>	Session	= sessionmaker()
>>>	Session.configure(bind=engine) //创建engine后执行
添加新对象
>>>	session	=	Session()
>>>	session.add(dep_dev)
>>> session.commit()
>>> print(str(dep_dev.dep_id))
>>> session.close()
dep_hr = Departments(dep_name='hr')
dep_op = Departments(dep_name='operations')
dep_finance = Departments(dep_name='财务')
dep_xz = Departments(dep_name='行政’)
Session	= sessionmaker(engine)
session	= Session()
session.add_all([dep_hr,	dep_op,	dep_finance,	dep_xz])
session.commit()
session.close()
外键约束
class	Employees(Base):
__tablename__	=	'employees'
emp_id =	Column(Integer,	primary_key=True)
name	=	Column(String(20))
genda =	Column(String(10))
phone	=	Column(String(11))
dep_id =	Column(Integer,	ForeignKey('departments.dep_id'))
def __repr__(self):
return	"<Employees(name='%s')>"	%	self.name

完整实现

sql_alchemy.py

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

#创建到数据库的引擎
engine = create_engine(
    # mysql+pymysql://用户名:密码@服务器/数据库?字符集参数
    'mysql+pymysql://root:{123qqq...A}@127.0.0.1/tedu1902?charset=utf8',
    encoding = 'utf8',
    echo=True  #打开调试模式,生产环境不要设置
)

#创建一个会话类,只有在增删改查的时候需要,本模块文件实际上用不到
#只是为了在其他模块中可以直接调用,在本模块中创建
Session = sessionmaker(bind=engine)

#生成实体类的基类
Base = declarative_base()

#创建部门表的实体类
class Departments(Base):
    __tablename__ = 'departments' #此类关联departments表
    dep_id = Column(Integer,primary_key=True)
    dep_name = Column(String(20),unique=True)
class Employees(Base):
    __tablename__ = 'employees'
    emp_id = Column(Integer,primary_key=True)
    emp_name = Column(String(20))
    birth_date = Column(Date)
    email = Column(String(50))
    dep_id = Column(Integer,ForeignKey('departments.dep_id'))
class Salary(Base):
    __tablename__ = 'salary'
    id = Column(Integer,primary_key=True)
    date = Column(Date)
    basic = Column(Integer)
    awards = Column(Integer)
    emp_id = Column(Integer,ForeignKey('employees.emp_id'))

if __name__ == '__main__':
    #库中无表则创建,有表只是关联,不会再覆盖
    Base.metadata.create_all(engine)

crud.py

from sql_alchemy import Departments
from sql_alchemy import Employees
from sql_alchemy import Salary
from sql_alchemy import Session

session = Session()

#创建部门
hr = Departments(dep_id=1,dep_name='人事部')
ops = Departments(dep_id=2,dep_name='运维部')
dev = Departments(dep_id=3,dep_name='开发部')
qa = Departments(dep_id=4,dep_name='测试部')
finance = Departments(dep_id=5,dep_name='财务部')
market = Departments(dep_id=6,dep_name='市场部')
sales = Departments(dep_id=7,dep_name='销售部')

deps = [hr,ops,dev,qa,finance,market,sales]
session.add_all(deps)
session.commit()
session.close()

标签:__,SQLAlchemy,name,dep,基础,Departments,Column,id
来源: https://blog.csdn.net/JReno/article/details/95514930