SQLAlchemy属性常用数据类型

常用数据类型

  • integer: 整形
  • Float: 浮点类型
  • Boolean:传递True/False进去
  • DECIMAL:顶点类型
  • enum: 枚举类型
  • Date:传递dateting.date()进去
  • DateTime:传递dateting.datetime()进去
  • Time:传递datetime.time()进去
  • String:字符类型,使用时需要指定长度,区别于text类型
  • Text:文本类型
  • LONGTEXT:长文本类型
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float, DECIMAL, Boolean, Enum
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Date, DateTime, Time
# 需要导入时间模块
from datetime import datetime, date, time
from sqlalchemy.dialects.mysql import LONGTEXT

HOSTNAME = '127.0.0.1'
DATABASE = 'demo0417'
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,6))
    is_delete = Column(Boolean)
    gender = Column(Enum('男', '女')) # dafault 默认值,当不传入时
    create_time = Column(DateTime)
    content = Column(LONGTEXT)


# 因为修改了属性,但是表是不会发生变化的,需要用到映射
# 但映射方法还未接触 所以先删除表 重建  项目中是不会这样做的

Base.metadata.drop_all()
Base.metadata.create_all()
Session = sessionmaker(bind=engine)
session = Session()


# user = User(name='happy', price=99.998976)
# user = User(name='happyy', price=88.9876, is_delete=True)
user = User(name='happyy', price=88.9876, is_delete=True, gender='女', create_time=datetime(2020, 5, 1, 9, 2), content='ssssshappyyyyppha')



session.add(user)
session.commit()

Column常用参数

  • default:默认值
  • nullable:是否可空
  • primary_key :是否为主键
  • unique:是否唯一
  • autoincrement:是否自动增长
  • onupdate:更新的时候执行的函数
  • name:该属性在数据库中的字段映射
# onupdate 可以写一个函数修改记录时候调用
update_time = Column(DateTime, onupdate=datetime.now())

user = session.query(User).first()
print(user.name)
user.name = 'hahaha'
session.commit()
name = Column('fullname', String(60))
Base.metadata.create_all()

Session = sessionmaker(bind=engine)
session = Session()

user = User(name='happyy', price=88.9876, is_delete=True, gender='女', create_time=datetime(2020, 5, 1, 9, 2), content='ssssshappyyyyppha')
session.add(user)
session.commit()

query可用参数

  • 模型对象。 指定查找这个模型中所有的对象
  • 模型中的属性。 可以指定只查找某个模型的其中几个属性
  • 聚合函数。
    func.count 统计行的数量
  • func.avg: 求平均值
    • func.max: 求最大值
    • func.min : 求最小值
    • func.sum: 求和。
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'
DATABASE = 'demo0417'
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 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): 方法类似
    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)
#     # 可以指定只查找某个模型的其中几个属性
#     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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值