sqlalchemy常用的数据类型:
Integer:整形。
Float:浮点类型。
Boolean:传递True/False进去。
DECIMAL:定点类型。
enum:枚举类型。
Date:传递datetime.date()进去。
DateTime:传递datetime.datetime()进去。
Time:传递
datetime.time()进去。
String:字符类型,使⽤时需要指定⻓度,区别于Text类型。
Text:⽂本类型。
LONGTEXT:⻓⽂本类型。
# @ Time : 2020/4/21 21:43
# @ Author : Ellen
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float, DECIMAL, Boolean, Enum, Date, DateTime, Time
from sqlalchemy.orm import sessionmaker
from datetime import datetime,date,time
from sqlalchemy.dialects.mysql import LONGTEXT
# localhost
HOSTNAME = '127.0.0.1'
DATABASE = 'demo0419'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
Base = declarative_base(engine)
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(60))
# price = Column(Float)
# 总共有多少位 保留几位小数
price = Column(DECIMAL(20, 5))
is_delete = Column(Boolean)
gender = Column(Enum('男','女'), default='男')
create_time = Column(DateTime)
content = Column(LONGTEXT)
# onupdate 可以写一个函数 修改记录的时候
update_time = Column(DateTime, onupdate=datetime.now())
# 删除
Base.metadata.drop_all()
Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session()
user = User(name='ellen', price=10.234, is_delete=True,create_time=datetime(2020,4,21,22,21,18),content='每天进步')
session.add(user)
session.commit()
# user = session.query(User).first()
# print(user.name)
# user.name = 'python'
# session.commit()
Column常⽤参数:
default:默认值。
nullable:是否可空。
primary_key:是否为主键。
unique:是否唯⼀。
autoincrement:是否⾃动增⻓。
sqlalchemy常⽤数据类型
Column常⽤参数59
onupdate:更新的时候执⾏的函数。
name:该属性在数据库中的字段映射
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,Float
from sqlalchemy.orm import sessionmaker
from sqlalchemy import func
import random
HOSTNAME = '127.0.0.1'
PORT = '3306'
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'demo0419'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}?charset=utf8'.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)
title = Column(String(50), nullable=False)
price = Column(Float, nullable=False)
# def __repr__(self)方法和__str__方法基本类似
def __str__(self):
return "Article(title:{},price:{})".format(self.title,self.price)
Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session()
# for i in range(6):
# article = Article(title="title%s" % i, price=random.randint(1,50))
# session.add(article)
#
# session.commit()
# articles = session.query(Article).all()
# print(articles)
# for article in articles:
# print(article.title)
# 聚合函数
# result = session.query(func.count(Article.id)).first()
# print(result)
result = session.query(func.avg(Article.price)).first()
print(result)
result = session.query(func.max(Article.price)).first()
print(result)
result = session.query(func.sum(Article.price)).first()
print(result)
'''
聚合函数。
func.count:统计⾏的数量。
func.avg:求平均值。
func.max:求Y⼤值。
func.min:求Y⼩值。
func.sum:求和。
'''
query可⽤参数
- 模型对象。指定查找这个模型中所有的对象。
- 模型中的属性。可以指定只查找某个模型的其中⼏个属性。
- 聚合函数。
func.count:统计⾏的数量。
func.avg:求平均值。
func.max:求Y⼤值。
func.min:求Y⼩值。
func.sum:求和。
过滤是数据提取的⼀个很重要的功能,以下对⼀些常⽤的过滤条件进⾏解释, 并且这些过滤条件都是只能通过filter⽅法实现的:
equals
query.filter(User.name == ‘ed’)
not equals
query.filter(User.name != ‘ed’)
like
query.filter(User.name.like(’%ed%’))
in
query.filter(User.name.in_([‘ed’,‘wendy’,‘jack’]))
同时,in也可以作⽤于⼀个Query query.filter(User.name.in_(session.query(User.name).filter(User.name.like (’%ed%’))))
not in
query.filter(~User.name.in_([‘ed’,‘wendy’,‘jack’]))
is null
query.filter(User.name==None)
或者是
query.filter(User.name.is_(None))
is not null
query.filter(User.name != None)
或者是
query.filter(User.name.isnot(None))
and
from sqlalchemy import and_ query.filter(and_(User.name==‘ed’,User.fullname==‘Ed Jones’)
或者是传递多个参数 4 query.filter(User.name==‘ed’,User.fullname==‘Ed Jones’)
或者是通过多次filter操作 query.filter(User.name==‘ed’).filter(User.fullname==‘Ed Jones’)
or
from sqlalchemy import or_ query.filter(or_(User.name==‘ed’,User.name==‘we ndy’))
# @ Time : 2020/4/23 14:23
# @ Author : Ellen
from sqlalchemy import create_engine, and_, or_
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String, Float
import random
HOSTNAME = '127.0.0.1'
PORT = '3306'
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'demo0419'
DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)
Base = declarative_base(engine)
class Article(Base):
__tablename__ = 'article2'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50))
price = Column(Float, nullable=False)
def __str__(self):
return "Article(title:{},price:{})".format(self.title, self.price)
# Base.metadata.drop_all()
Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session()
# for i in range(6):
# article = Article(title="title%s" % i,price=random.randint(1, 50))
# session.add(article)
#
# session.commit()
# eq
# result = session.query(Article).filter(Article.title =='title0').all()
# not eq mysql <>
# result = session.query(Article).filter(Article.title !='title0').all()
# like 模糊查询
# title 包含 title
# result = session.query(Article).filter(Article.title.like('%title%')).all()
# in 在..里面 Pyhont关键字 _ 私有的(下划线加前面)
# in[1,4] 查询的是id 为1,4 不是范围
# result = session.query(Article).filter(Article.title.in_(['title0','title4'])).all()
# not in 取反
# result = session.query(Article).filter(~Article.title.in_(['title0','title4'])).all()
# result = session.query(Article).filter(Article.title.notin_(['title0','title4'])).all()
# Null(未开辟空间),空(已开辟空间)
# result = session.query(Article).filter(Article.title == None).all()
# result = session.query(Article).filter(Article.title.is_(None)).all()
# result = session.query(Article).filter(Article.title.isnot(None)).all()
# result = session.query(Article).filter(Article.title !=None).all()
# and 和,且 推荐->第一种简单
# result = session.query(Article).filter(Article.title == 'title0', Article.price == 23).all()
# result = session.query(Article).filter(and_(Article.title == 'title0', Article.price == 23)).all()
# result = session.query(Article).filter(Article.title == 'title0').filter(Article.price == 23).all()
# or 或 只满足一个条件就可以
result = session.query(Article).filter(or_(Article.title == 'title0', Article.price == 17, Article.title == 'title2')).all()
for data in result:
print(data)
# print(result)