欢迎访问宙启技术站
智能推送

SQLAlchemy.types中的Numeric类型解析

发布时间:2023-12-15 19:15:04

SQLAlchemy中的Numeric类型是一种用于表示小数的数据类型。它在数据库中存储为固定精度的数字。Numeric类型是一个可接受参数的类型,用于指定固定精度和小数位数。

Numeric类型的常用参数包括precision和scale,分别用于指定总位数和小数点后的位数。例如,Numeric(10, 2)表示总共10位数,其中小数点后有2位。如果不提供这两个参数,则默认为Numeric(10, 0),即总共10位数,全部为整数。

下面是一个使用Numeric类型的例子:

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

# 创建连接引擎和会话
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()

# 创建基本映射类
Base = declarative_base()

# 定义数据表映射类
class Product(Base):
    __tablename__ = 'product'
    id = Column(Integer, primary_key=True)
    name = Column(Numeric(10,2))
    price = Column(Numeric(10,2))

# 创建表
Base.metadata.create_all(engine)

# 插入数据
product = Product(name=100.50, price=9.99)
session.add(product)
session.commit()

# 查询数据
products = session.query(Product).all()
for product in products:
    print(f"Product: name={product.name}, price={product.price}")

# 更新数据
product = session.query(Product).filter_by(name=100.50).first()
product.price = 19.99
session.commit()

# 删除数据
product = session.query(Product).filter_by(name=100.50).first()
session.delete(product)
session.commit()

# 关闭会话
session.close()

在上面的例子中,我们首先创建了一个使用Numeric类型的数据表映射类 Product。该类有两个属性 name 和 price,它们都是Numeric(10,2)类型,表示总共10位数字,其中小数点后有2位。

然后,我们使用 sqlalchemy.create_engine() 函数创建了一个连接引擎,并通过 sqlalchemy.orm.sessionmaker() 函数创建了一个会话。

接下来,我们使用 Base.metadata.create_all() 方法创建了表格,该方法会根据我们定义的数据表映射类来生成表格结构。

接着,我们插入了一条数据,并通过 session.query() 方法查询了所有数据,并通过遍历的方式打印了每一条数据。

然后,我们更新了数据表中的一条数据,并通过 session.query() 方法删除了一条数据。

最后,我们通过 session.close() 方法关闭了会话。

Numeric类型是一种非常实用的数据类型,它可以有效地处理需要固定精度小数的数据。无论是处理货币、税率还是其他带有固定小数位的数据,Numeric类型都是一种很好的选择。