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类型都是一种很好的选择。
