zoukankan      html  css  js  c++  java
  • 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,
    #就行了
  • 相关阅读:
    实验室机器OracleXE客户端连接远程Oracle服务器
    PLSQL Developer 远程连接Oracle XE数据库(其他Oracle数据库类似)
    VB进制转化大全
    给定一个硬盘标识,umout掉所有相关挂载
    linux读取硬盘指定扇区
    开发板上挂载NTFS分区
    write error:file too large!!!
    一些自用的c函数
    主引导记录(MBR)分析
    strtok_r函数学习
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/9709037.html
Copyright © 2011-2022 走看看