Python操作mysql-------SQLAlchemy连接数据库(三)

创建模式(表创建)

会把类转化为原生的表创建语句,创建一个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常用列选项

  1. primary_key是否为主键,是为true;
  2. unique是否唯一,true表示这列不允许出现重复的值;
  3. index是否为这列创建索引;
  4. nullable是否允许为空;
  5. default是否为这列定义默认值;
  6. name该属性再数据库中的字段映射;
  7. autoincrement是否自动增加;
  8. onupdate更新是执行的函数;
  9. 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}')
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值