sqlalchemy常用的数据类型

本文介绍了SQLAlchemy中常用的数据类型,如Integer、Float、Boolean、Date等,并详细讲解了Column参数,如default、nullable等。此外,还讨论了查询操作,包括使用func进行聚合函数计算,以及各种过滤条件,如equals、not equals、like、in、not in、is null、is not null、and和or等过滤表达式的使用方法。

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可⽤参数

  1. 模型对象。指定查找这个模型中所有的对象。
  2. 模型中的属性。可以指定只查找某个模型的其中⼏个属性。
  3. 聚合函数。
    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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值