1、sqlalchemey基本数据类型:
数据类型 python数据类型 说明
Integer: int 整形
String: str 字符串
Float :float 浮点型
DECIMAL: decimal.Decimal 定点型
Boolean :bool 布尔型
Date: datetime.date 日期
DateTime: datetime.datetime 日期和时间
Time: datetime.time 时间
Enum: str 枚举类型
Text: str 文本类型
LongText: str 长文本类型
2、Column参数:
default:默认值
nullable:是否为空
primary_key:主键
unique:是否唯一
autoincrement:是否自增
onupdate:更新时执行的
name:数据库映射后的属性
3、代码实例:
数据库连接
from sqlalchemy import create_engine
数据表基类
from sqlalchemy.ext.declarative import declarative_base
表格字段类型
from sqlalchemy import Column,String,Integer,DateTime,Enum,Date,Time
数据表操作会话
from sqlalchemy.orm import sessionmaker
from datetime import datetime
enum是python3 新增
import enum
DB_USERNAME = ‘postgres’
DB_PASSWORD = ‘123456’
DB_HOST = “127.0.0.1”
DB_PORT = “5432”
DB_NAME = “cms”
#连接数据库的信息,# url的格式为:数据库的协议://用户名:密码@ip地址:端口号(默认可以不写)/数据库名
SQLALCHEMY_DATABASE_URI = “postgresql://{}:{}@{}:{}/{}”.format(DB_USERNAME,DB_PASSWORD,DB_HOST,DB_PORT,DB_NAME)
#创建引擎
engines = create_engine(SQLALCHEMY_DATABASE_URI)
连接数库
engines.connect()
#建立数据库基类:数据库建立删除等
dbbase = declarative_base(engines)
表格操作会话:增删改查
session = sessionmaker(engines)()
枚举类
class TagEnum(enum.Enum):
python = “python”
flask = “flask”
django = “django”
继承基类,建立orm对应的数据表格
class Person(dbbase):
#定义表名
tablename = “person”
def init(self,id,username,addr,age,subject = “flask”):
self.id = id
self.username = username
self.addr = addr
self.age = age
self.subject = subject
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(50))
addr = Column(String(100),nullable=True)
age = Column(Integer,nullable=True)
subject = Column(Enum(TagEnum),nullable=True)
create_time = Column(DateTime,default=datetime.now())
update_time = Column(DateTime,onupdate=datetime.now())
if name == “main”:
dbbase.metadata.drop_all() # 删除表
dbbase.metadata.create_all() # 创建表格
# 新增记录:add+commit
for i in range(100):
p = Person(id=i, username="tom", addr="meiguo", age=18, subject=TagEnum.python)
session.add(p)
session.commit()
# 查询:session.query
persons = session.query(Person.id,Person.subject,Person.addr).filter(Person.id > 18)
for p in persons:
print(p[0],p[1],p[2])
# like
persons = session.query(Person.id, Person.subject, Person.addr).filter(Person.addr.like("%g%") )
for p in persons:
print(p[0], p[1], p[2])
# in
persons = session.query(Person.id, Person.subject, Person.addr).filter(Person.subject.in_(["python","flask"])).all()
for p in persons:
print(p[0], p[1], p[2])
# not in
persons = session.query(Person.id, Person.subject, Person.addr).filter(Person.subject.notin_([TagEnum.python, TagEnum.flask])).all()
print("not in:")
for p in persons:
print(p[0], p[1], p[2])
# is null
persons = session.query(Person.id, Person.subject, Person.addr).filter(Person.subject==None).all()
print("is null:")
for p in persons:
print(p[0], p[1], p[2])
# is not null
persons = session.query(Person.id, Person.subject, Person.addr).filter(Person.subject != None).all()
print("is not null:")
for p in persons:
print(p[0], p[1], p[2])
# and
persons = session.query(Person.id, Person.subject, Person.addr).filter(Person.subject != None, Person.id == 3).all()
print("and:")
for p in persons:
print(p[0], p[1], p[2])
# or
persons = session.query(Person.id, Person.subject, Person.addr).filter(or_(Person.subject != None, Person.id == 3)).all()
print("or:")
for p in persons:
print(p[0], p[1], p[2])
#聚合函数:count,sum,avg
rs = session.query(func.count(Person.id)).first()
print(rs)
rs = session.query(func.avg(Person.age)).first()
print(rs)
rs = session.query(func.sum(Person.age)).first()
print(rs)
: