SQLAlchemy对数据库的增删改查操作

Stella981
• 阅读 748

创建指定的数据库表:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,create_engine

#创建一个orm模型基类
Base=declarative_base()

class User(Base):
    __tablename__="user"
    id=Column(Integer,primary_key=True,autoincrement=True)
    name=Column(String(32),index=True)

#创建数据库连接
engine=create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/lgweb?charset=utf8")

#调用engine 创建所有继承base类的数据表类
Base.metadata.create_all(engine)

对数据库中表数据的添加及批量添加操作:

from creat_table import engine,User
from sqlalchemy.orm.session import sessionmaker

#创建指定数据库会话
Session=sessionmaker(engine)
#打开会话窗口
db_session=Session()

# user_obj=User(name="tom")
# user1=User(name="lisa")

#相当于insert into
# db_session.add(user_obj)
# db_session.add(user1)
db_session.add_all([
    User(name="婉君"),User(name="小芬"),User(name="程洁"),User(name="思宇")
])
#提交数据
db_session.commit()

db_session.close()

单表查询:

from creat_table import engine,User
from sqlalchemy.orm.session import sessionmaker

Session=sessionmaker(engine)
db_session=Session()

# user_list=db_session.query(User).filter(User.id>=4).all()
user_list=db_session.query(User).filter_by(id>=4).all()
for user in user_list:
    print(user.id,user.name)

更新数据:

from creat_table import engine,User
from sqlalchemy.orm.session import sessionmaker

Session=sessionmaker(engine)
db_session=Session()

db_session.query(User).filter_by(name="小芬").update({"name":"晓晓"})
db_session.commit()

删除数据:

from creat_table import engine,User
from sqlalchemy.orm.session import sessionmaker

Session=sessionmaker(engine)
db_session=Session()

ret=db_session.query(User).filter_by(id="2").delete()
print(ret)
db_session.commit()
db_session.close()

************************************************************************************************************************

多表关联:主外键关联

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.engine import create_engine
from sqlalchemy.orm.session import Session
from sqlalchemy.orm import relationship
from sqlalchemy import Column,Integer,String,ForeignKey

#创建一个数据表的继承基类
Base=declarative_base()
#创建一个数据库连接
engine=create_engine("mysql+pymysql://root:root1234@127.0.0.1:3306/db_unv?charset=utf8")
#创建一个会话
db_session=Session(engine)



class Student(Base):
    __tablename__="student"
    id=Column(Integer,primary_key=True)
    name=Column(String(32),index=True)
    school_id=Column(Integer,ForeignKey("school.id"))   #外键
    stu2sch=relationship("School",backref='sch2stu')    # school反向解析student关键字


class School(Base):
    __tablename__="school"
    id = Column(Integer, primary_key=True)
    name = Column(String(32), index=True)

Base.metadata.create_all(engine)

多表的数据添加:

from creat_table import engine,School,Student
from sqlalchemy.orm.session import sessionmaker

session=sessionmaker(engine)
db_session=session()

# stu_obj=Student(name="凯文",stu2sch=School(name="麻省理工"))         #反向添加数据
sch_obj=School(name="常青藤大学",sch2stu=[Student(name="胡柯"),Student(name="徐素")])    #正向添加


# db_session.add(stu_obj)
db_session.add(sch_obj)
db_session.commit()
db_session.close()

多表数据的更新和删除:

from creat_table import School,Student,engine
from sqlalchemy.orm.session import sessionmaker

Session=sessionmaker(engine)
db_session=Session()

# stu_obj=db_session.query(Student).filter(Student.name=="徐菲菲").first()
# print(stu_obj.school_id)
#
# db_session.query(Student).filter(Student.id==stu_obj.id).update({"school_id":2})
sch_obj=db_session.query(School).filter(School.name=="麻省理工").first()
# ret=db_session.query(Student).filter(Student.school_id==sch_obj.id).update({"school_id":3})
db_session.query(Student).filter(Student.school_id==sch_obj.id).delete()

db_session.commit()

db_session.close()
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
SQLAlchemy对数据库的增删改查操作
创建指定的数据库表:fromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemyimportColumn,Integer,String,create_engine创建一个orm模型基类Basedeclarative_ba
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这