ORM层面删除数据
ORM
层面删除数据,会无视mysql
级别的外键约束。
- 直接会将对应的数据删除,然后将从表中的那个外键设置为
NULL
。
- 如果想要避免这种行为,应该将从表中的外键的
nullable=False
。
from sqlalchemy import create_engine,Column,Integer,Float,Boolean,DECIMAL,Enum,\
Date,DateTime,Time,String,Text,func,or_,and_,ForeignKey,Table
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
import random
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'
DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8"\
.format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)()
class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
uname = Column(String(50),nullable=False)
class News(Base):
__tablename__ = 'news'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50),nullable=False)
uid = Column(Integer,ForeignKey("user.id"),nullable=False)
author = relationship("User",backref='newss')
Base.metadata.drop_all()
Base.metadata.create_all()
user = User(uname='wukong')
news= News(title='hello world')
news.author = user
session.add(news)
session.commit()