sqlalchemy orm 層面刪除數據注意


#encoding: utf-8

from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text,\
    ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
from random import randint

HOSTNAME = '127.0.0.1'

PORT = 3306

DATABASE = 'first_sqlalchemy'

USERNAME = 'root'

PASSWORD = '123456'

#dialect+driver://username:password@host:port/database
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)
# session = Session()

session = sessionmaker(engine)() #Session(**local_kw)


class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(50),nullable=False,unique=True)


class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer,primary_key=True,autoincrement=True)
    article_name = Column(String(50),nullable=False)
    uid = Column(Integer,ForeignKey('user.id'))
    author = relationship('User',backref='articles')

# Base.metadata.drop_all()
#
# Base.metadata.create_all()

#增加數據
# user = User(username='xiaowu')
#
# article = Article(article_name = 'xiaoshuowang')
#
# user.articles.append(article)
#
# session.add(user)
# session.commit()


#刪除表中的數據,不是說存外鍵關系,主表的數據是不能刪除的嗎?
user = session.query(User).first()
session.delete(user)
session.commit()
#一對多關系,外鍵約束默認是RESTRICT,父表有關聯子表,數據刪除不掉,為社么這里不行
#因為在orm層面沒有設置uid = Column(Integer,ForeignKey('user.id')) nullable 等於False,
#所以,uid設置成null,父表的主鍵就可以刪除了
#要避免這樣的結果就要這樣設置,uid = Column(Integer,ForeignKey('user.id'),nullable=False,
#就行了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM