操作代码
创建模式(表创建)
会把类转化为原生的表创建语句,创建一个course表,show tables;
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
#创建连接引擎,数据库名
engine=create_engine('mysql+pymysql://root:root@localhost:3306/finddata?charset=utf8',echo=True)
#声明映射
Base=declarative_base()
#定义Course对象,课程表对象
class Course(Base):
#表名字
__tablename__='course'
id=Column(Integer,primary_key=True)
course_name=Column(String(20),default=None,nullable=False,comment='课程名称')
teacher_name=Column(String(20),default=None,nullable=None,comment='任课老师')
class_times=Column(Integer,default=0,nullable=None,comment='课时')
#定义_repr_函数,返回一个可以用来表示对象的可打印字符串
def __repr__(self):
c_name=self.course_name
t_name=self.teacher_name
c_times=self.class_times
return f"Course:(course_name={c_name},teacher_name={t_name},class_times={c_times})"
#创建表
Base.metadata.create_all(engine)#执行创建表,创建过后就注释掉该命令行,否则重复创建
column常用列选项
- primary_key是否为主键,是为true;
- unique是否唯一,true表示这列不允许出现重复的值;
- index是否为这列创建索引;
- nullable是否允许为空;
- default是否为这列定义默认值;
- name该属性再数据库中的字段映射;
- autoincrement是否自动增加;
- onupdate更新是执行的函数;
- comment字段描述
创建映射类的实例(向表添加数据)
创建好类对象后,通过类对象创建类实例,对course类创建实例。返回的course对象是一个地址,通过类对象获取具体的属性。向表添加数据 但是没有添加到数据库中,需要session.add(course_obj)和session.commit()
course_obj=Course(course_name='python',teacher_name='Teacher Li',class_times=32)
print(f'Course对象==>{course_obj}')
print(f'课程名称:{course_obj.course_name}')
创建会话(用类对象操作表)
要真正应用类对象操作表,需要Session对象。
Session对象提供query()查询数据、add()插入、add_all()插入、commit()事务提交、delete()从session中移除某对象、flush()在事务管理内与数据可发生交互,对应的实例状态被反映到数据库、rollback()回滚变更、close()
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
#创建Session
Session=sessionmaker()
#创建连接引擎,数据库名
engine=create_engine('mysql+pymysql://root:root@localhost:3306/finddata?charset=utf8',echo=True)
Session.configure(bind=engine)
#声明映射
Base=declarative_base()
#构建session
session=Session()
#定义Course对象,课程表对象
class Course(Base):
#表名字
__tablename__='course'
id=Column(Integer,primary_key=True)
course_name=Column(String(20),default=None,nullable=False,comment='课程名称')
teacher_name=Column(String(20),default=None,nullable=None,comment='任课老师')
class_times=Column(Integer,default=0,nullable=None,comment='课时')
#定义_repr_函数,返回一个可以用来表示对象的可打印字符串
def __repr__(self):
c_name=self.course_name
t_name=self.teacher_name
c_times=self.class_times
return f"Course:(course_name={c_name},teacher_name={t_name},class_times={c_times})"
#创建表
Base.metadata.create_all(engine)#执行创建表,创建过后就注释掉该命令行,否则重复创建
#!!!!!!!然后就可以进行数据库操作了!!!!!!!!!!!!!!!!!!!!!!!
Session=sessionmaker(twophase=True)
会话类可以根据一些策略,绑定多个engine,可以是多个数据库连接
1. 添加数据add()
#创建Course类实例
course_obj=Course(course_name='python',teacher_name='Teacher Li',class_times=32)
#添加实例
session.add(course_obj)
#事务提交
session.commit()
2. 添加数据add_all()
#添加多个对象
course_obj_1=Course(course_name='python',teacher_name='Teacher Li',class_times=32)
course_obj_2=Course(course_name='python',teacher_name='Teacher zhang',class_times=32)
course_obj_3=Course(course_name='mysql',teacher_name='Teacher xiao',class_times=16)
session.add_all([course_obj_1,course_obj_2,course_obj_3])
session.commit()
3. 查询对象
query_result=session.query(Course).all()
for item in query_result:
print(f'查询结果为===>{item}')
query_result=session.query(Course).filter(Course.course_name=='mysql')
for item in query_result:
print(f'查询结果为===>{item}')
也可以
from sqlalchemy import text
query_result=session.query(Course).filter(text("course_name='mysql'")).all()
4. 更新对象
选择第一个
query_result=session.query(Course).filter(Course.course_name=='python').first()
更新所有
query_result=session.query(Course).filter(Course.course_name=='python')
for item in query_result:
print(f'查询结果为===>{item}')
print(f'item对象的类型为:{type(item)}')
print(f'更改前teacher_name={item.teacher_name}')
item.teacher_name='Teacher qing'
session.add(item)
session.commit()
query_result=session.query(Course).filter(Course.course_name=='python')
for item in query_result:
print(f'更改后teacher_name={item.teacher_name}')
5. 删除对象
删除查询的第一个数据
query_result=session.query(Course).filter(Course.course_name=='python').first()
#删除数据
session.delete(query_result)
session.commit()
##6. filter操作
#等于,不等于,%
query_result=session.query(Course).filter(Course.course_name=='python')
query_result=session.query(Course).filter(Course.course_name!='python')
query_result=session.query(Course).filter(Course.course_name.like('%tho%'))
#两个
query_result=session.query(Course).filter(Course.course_name=='python',Course.teacher_name=='Teacher liu')
query_result=session.query(Course).filter(Course.course_name=='python').filter(Course.teacher_name=='Teacher liu')
#使用and
query_result=session.query(Course).filter(and_(Course.course_name!='python',Course.teacher_name=='Teacher liu'))
#or,in,not in
query_result=session.query(Course).filter(or_(Course.course_name!='python',Course.teacher_name=='Teacher liu'))
query_result=session.query(Course).filter(Course.teacher_name.in_(['Teacher Wang','Teacher Liu']))
query_result=session.query(Course).filter(~Course.teacher_name.in_(['Teacher Wang','Teacher Liu']))
#is null
query_result=session.query(Course).filter(Course.teacher_name is None)
#is not null
query_result=session.query(Course).filter(Course.teacher_name is not None)
7. 嵌入使用SQL语句
通过text()使用SQL语句
from sqlalchemy import text
query_result=session.query(Course).filter(text("course_name='mysql'")).all()
query_result=session.query(Course).filter(text("course_name=:c_name and teacher_name=t_name")).params(c_name='mysql',t_name='Teacher Li').all()
query_result=session.query(Course).filter(text("select * from course where course_name='mysql'")).all()
Session=sessionmaker()
engine=create_engine('mysql+pymysql://root:root@localhost:3306/finddata?charset=utf8',echo=True)
Session.configure(bind=engine)
session=Session()
data=session.execute('select * from course')
printf(f'数据:{data}')
8. 计数
query_result=session.query(Course).count()
所有代码:
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
#创建Session
Session=sessionmaker()
#创建连接引擎,数据库名
engine=create_engine('mysql+pymysql://root:root@localhost:3306/finddata?charset=utf8',echo=True)
Session.configure(bind=engine)
#声明映射
Base=declarative_base()
#构建session
session=Session()
#定义Course对象,课程表对象
class Course(Base):
#表名字
__tablename__='course'
id=Column(Integer,primary_key=True)
course_name=Column(String(20),default=None,nullable=False,comment='课程名称')
teacher_name=Column(String(20),default=None,nullable=None,comment='任课老师')
class_times=Column(Integer,default=0,nullable=None,comment='课时')
#定义_repr_函数,返回一个可以用来表示对象的可打印字符串
def __repr__(self):
c_name=self.course_name
t_name=self.teacher_name
c_times=self.class_times
return f"Course:(course_name={c_name},teacher_name={t_name},class_times={c_times})"
#创建表
Base.metadata.create_all(engine)#执行创建表,创建过后就注释掉该命令行,否则重复创建
# #创建Course类实例
course_obj=Course(course_name='python',teacher_name='Teacher Li',class_times=32)
#
# #添加实例
session.add(course_obj)
#
# #事务提交
session.commit()
# #添加多个对象
course_obj_1=Course(course_name='python',teacher_name='Teacher Liu',class_times=32)
course_obj_2=Course(course_name='python',teacher_name='Teacher zhang',class_times=32)
course_obj_3=Course(course_name='mysql',teacher_name='Teacher xiao',class_times=16)
session.add_all([course_obj_1,course_obj_2,course_obj_3])
session.commit()
query_result=session.query(Course).all()
for item in query_result:
print(f'查询结果为===>{item}')
#
query_result=session.query(Course).filter(Course.course_name=='python')
for item in query_result:
print(f'查询结果为===>{item}')
print(f'item对象的类型为:{type(item)}')
print(f'更改前teacher_name={item.teacher_name}')
item.teacher_name='Teacher qing'
session.add(item)
session.commit()
# query_result=session.query(Course).filter(Course.course_name=='python')
for item in query_result:
print(f'更改后teacher_name={item.teacher_name}')
query_result=session.query(Course).filter(Course.course_name=='python').first()
#删除数据
session.delete(query_result)
session.commit()
# #等于,不等于,%
query_result=session.query(Course).filter(Course.course_name=='python')
query_result=session.query(Course).filter(Course.course_name!='python')
query_result=session.query(Course).filter(Course.course_name.like('%tho%'))
# #两个
query_result=session.query(Course).filter(Course.course_name=='python',Course.teacher_name=='Teacher liu')
query_result=session.query(Course).filter(Course.course_name=='python').filter(Course.teacher_name=='Teacher liu')
# #使用and
query_result=session.query(Course).filter(and_(Course.course_name!='python',Course.teacher_name=='Teacher liu'))
#or,in,not in
query_result=session.query(Course).filter(or_(Course.course_name!='python',Course.teacher_name=='Teacher liu'))
query_result=session.query(Course).filter(Course.teacher_name.in_(['Teacher Wang','Teacher Liu']))
query_result=session.query(Course).filter(~Course.teacher_name.in_(['Teacher Wang','Teacher Liu']))
# #is null
query_result=session.query(Course).filter(Course.teacher_name is None)
#
#is not null
query_result=session.query(Course).filter(Course.teacher_name is not None)
from sqlalchemy import text
query_result=session.query(Course).filter(text("course_name='mysql'")).all()
print(f'查询结果{query_result}')