sqlalchemy:外键

数据库连接

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

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
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() # 创建表格

结果
sqlalchemy:外键_第1张图片

外键约束:
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”))

你可能感兴趣的:(python学习总结)