使用sqlalchemy对数据库表进行增删查改操作

发布时间:2018-04-25 编辑:汤利军 阅读:

上一节为大家讲解了“定义ORM模型,并将ORM模型映射到数据库中”,将ORM模型映射到数据库后,我们就可以对数据库表进行增删查改操作了。
  
from sqlalchemy import create_engine,Column,Integer,String
  
from sqlalchemy.ext.declarative import declarative_base
  
from sqlalchemy.orm import sessionmaker
  
DIALCT = "mysql"
  
DRIVER = "pymysql"
 
USERNAME = "root"
  
PASSWORD = "root"
  
HOST = "127.0.0.1"
  
PORT = "3306"
  
DATABASE = "test"
  
DB_URI={}+{}://{}:{}@{}:{}/{}?charset=utf8.format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
  
engine = create_engine(DB_URI)
  
Base = declarative_base(engine)
  
# 创建session 会话对象
session = sessionmaker(engine)()
  
class Person(Base):
  __tablename__ = "person" 
  id = Column(Integer , primary_key=True , autoincrement=True)  
  name = Column(String(10) , nullable=False)  
  age = Column(Integer, nullable=False) 

     #定义__repr__方法:将对象的属性方法打印成一个可读字符串
  def __repr__(self):  
        return "id:%s,name:%s,age:%s"%(self.id,self.name,self.age)
  
# Base.metadata.drop_all()
  
# Base.metadata.create_all()
  
# 添加数据
def add_data():
  # 向表中添加一条数据  
  person = Person(name = "jack" , age = 20)  
  session.add(person)
       #  添加数据后、数据保存到电脑内存上,并没有添加到数据库中,需使用 session.commit() 方法将数据提交到数据库中。
        session.commit()

       结果如下:

 
  
  # 向表中添加多条数据(如需添加多条数据、只需使用add_all方法将多条数据添加到一个列表即可) 
  person1 = Person(name = "blue" , age = 30)  
  person2 = Person(name = "tom" , age = 23)  
  session.add_all([person1,person2]) 
  session.commit()

       结果如下:
 
#查询数据 
def select_data():
  # 查询表中所有数据 
  results = session.query(Person).all()  
  for r in results:  
      print(r)
  结果如下:

  # 查询表中第一条数据  
  first = session.query(Person).first() 
  print(first)
       结果如下:


        # 查询表中name为tom的第一条数据
  result = session.query(Person).filter_by(name = "tom").first() 
  print(result)
       结果如下:
   
  # 查询表中年龄大于20的数据(结果为list,故用for循环遍历) 
  results = session.query(Person).filter(Person.age > 20).all()  
  for r in results:
       print(r)
       结果如下:


# filter: 多用于简单查询,filter_by:用于复杂查询,使用filter_by作为查询过滤条件时,需在前面添加对象名,如Person.age

#修改数据
def update_date():
  # 查询表中第一条数据,将其姓名修改为 tlj 
  result = session.query(Person).first()  
  result.name = "tlj" 
        session.commit()
  print(result)

        结果如下:
 
#删除数据 
def del_data():
  result = session.query(Person).first() 
  session.delete(result) 
  session.commit() 
       结果如下:


#如果程序作为主文件运行,将执行下面函数
if __name__ == "__main__":
        #执行增删查改操作、填写相对应函数即可(以添加数据为例)   
  add_data()

关注我

图文推荐

云标签

友链交换