数据库的操作中,增删改查是最重要的,最常用的操作,
数据库的重头戏
该例子通过类的方式进行解释:
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()