python SQLAlchemy ORM操作数据库之 增删改查

数据库的操作中,增删改查是最重要的,最常用的操作,
数据库的重头戏
该例子通过类的方式进行解释:
1.引入相关库和定义具体用户名等内容:

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

HOSTNAME = '127.0.0.1'

DATABASE = 'class_database'

PORT = 3306

USERNAME = 'root'
PASSWORD = 'root'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

engine = create_engine(DB_URL)
Base = declarative_base(engine)

Session = sessionmaker(bind=engine)
# bind  监听
session = Session()

2.定义article类:

class Article(Base):
    __tablename__ = 'article1'
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(50),nullable=False)
    #gender = Column(Integer,default=1,comment='1为男,2为女')
    content = Column(String(50))
    author = Column(String(50))
    is_delete = Column(Integer)
    # 注:为下文使用is_delete作准备,如果在该类中没有定义这个属性,在下文中是无法利用该属性的

    def __str__(self):
        return 'Article(name:{},content:{},author:{})'.format(self.name,self.content,self.author)
    # 魔法方法 __str__的作用:
    # 方法是用来显示信息的,通常是用来返回一个字符串,作为这个实例对象的描述信息,它只有一个参数,需要return一个数据,当你在类的外部打印实例对象的时候则会打印这个数据,在使用print(对象)
    # 或者str(对象)
    # 的时候会触发此方法。

3.具体的功能模块:
增加数据:

def add_data():
    article = Article(name='Python',content='人生苦短,我用python',author='鬼叔')
    session.add(article)
    session.commit()
    # 在增加一条数据之后,要通过session.commit()进行提交

查询数据:
1.查询所有:

def search_data():
	data = session.query(Article).all()
    for item in data:
       print(item)

2.条件查询:

def search_data():
	data = session.query(Article).filter(Article.name=='java',Article.is_delete==0).all()
    for item in data:
       print(item)

3.filter_by条件查询:

def search_data():
	data = session.query(Article).filter_by(name='java').all()
    for item in data:
       print(item)

4.查询第一条数据:(因为查询的是一条数据,所以不需要进行迭代)

def search_data():
	data = session.query(Article).first()
	# data = session.query(Article).last()   这样的方式是会出错的,没有这个方法
    print(data)

5.查询下一条数据或下几条数据:

def search_data():
	data = session.query(Article).get(1)  #注:没有1这个参数的话就会出问题的,需要参数
	# data = session.query(Article).get(4) #这样是读取接下来的第4条数据,只有一条数据,而不是接下来的4条数据,
	# data = session.query(Article).last()   这样的方式是会出错的,没有这个方法
    print(data)

修改数据:

def update_data():
    data = session.query(Article).first()
    data.name = 'logic'
    print(data.name)
    session.commit()
    # 在修改数据之后需要进行提交

也可以在数据提交之前进行回滚,提交之后则无法进行回滚:

def update_data():
    data = session.query(Article).first()
    data.name = 'logic'
    session.rollback()
    print(data.name)
    session.commit()

删除数据:

def delete_data():
    data = session.query(Article).first()
    session.delete(data)
    session.commit()

完整代码:

#! C:\Python\Python36
# -*- coding: utf-8 -*-
# @Time : 2020/10/30 12:33
# @Author : liuchengyong
# @File : flask-orm-add-rm.py
# @Software: PyCharm
# 数据库的操作之:增删改查
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker

HOSTNAME = '127.0.0.1'

DATABASE = 'class_database'

PORT = 3306

USERNAME = 'root'
PASSWORD = 'root'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

engine = create_engine(DB_URL)
Base = declarative_base(engine)

class Article(Base):
    __tablename__ = 'article1'
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(50),nullable=False)
    #gender = Column(Integer,default=1,comment='1为男,2为女')
    content = Column(String(50))
    author = Column(String(50))
    is_delete = Column(Integer)

    def __str__(self):
        return 'Article(name:{},content:{},author:{})'.format(self.name,self.content,self.author)
    # 魔法方法 __str__的作用:
    # 方法是用来显示信息的,通常是用来返回一个字符串,作为这个实例对象的描述信息,它只有一个参数,需要return一个数据,当你在类的外部打印实例对象的时候则会打印这个数据,在使用print(对象)
    # 或者str(对象)
    # 的时候会触发此方法。
    #
    # 在使用print()
    # 函数输出对象名称的时候默认的情况会打印对象名引用的内存地址,如果想要打印对象的属性值,可以使用__str__(self)
    # 这个方法。
    # 这个是加批注吗?
    # 性别  修饰通过1和2
    # 添加数据
Session = sessionmaker(bind=engine)
# bind  监听
session = Session()

def add_data():
    article = Article(name='Python',content='人生苦短,我用python',author='鬼叔')
    session.add(article)
    session.commit()

def search_data():
    # 查询所有
    #data = session.query(Article).all()
    # filter查询   按照条件查询
    #data = session.query(Article).filter(Article.name=='java',Article.is_delete==0).all()
    #data = session.query(Article).filter(Article.name == 'java', Article.is_delete==0).all()

    data = session.query(Article).filter_by(name='java').all()
    #
    # data = session.query(Article).filter_by(name='python').last()
    #data = session.query(Article).first()
    #data = session.query(Article).last()
    # 并未定义last的属性,没有最后一条,只能查下一条
    # data = session.query(Article).first()
    # print(data)
    # data = session.query(Article).get(4)
    # print(data)
    for item in data:
        # print(item.name)
        # print(item.content)
        # print(item.author)
        print(item)

def update_data():
    data = session.query(Article).first()
    data.name = 'logic'
    session.rollback()
    print(data.name)
    session.commit()

def delete_data():
    data = session.query(Article).first()
    session.delete(data)
    session.commit()

if __name__ == '__main__':
    #add_data()
    #search_data()
    update_data()
    #delete_data()
    

你可能感兴趣的:(#,flask框架,python,数据库)