from sqlalchemy import create_engine, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,Integer,DateTime,Enum,Date,Time,or_,Text,ForeignKey
from sqlalchemy.orm import sessionmaker,query
from datetime import datetime
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”
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
def __repr__(self):
return self.username
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())
class Artcle(dbbase):
tablename = “artcle”
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(50),nullable=True)
content = Column(Text)
uid = Column(Integer,ForeignKey(“person.id”))
if name == “main”:
dbbase.metadata.drop_all() # 删除表
dbbase.metadata.create_all() # 创建表格
外键约束:
ondelete参数:
(1)restrict:默认,主表删除以来子表,子表引用了,主表无法删除记录;
(2)cascase:主表删除,子表对应主表数据会自动删除;
(3)SET NULL:主表删除,对应子表的外键设置为null,注意这里不能设置nullable=True
class Artcle(dbbase):
tablename = “artcle”
id = Column(Integer,primary_key=True,autoincrement=True)
title = Column(String(50),nullable=True)
content = Column(Text)
uid = Column(Integer,ForeignKey(“person.id”,ondelete=“cascase”))