会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132475个问题

老师,你好。

关于删除数据这一块,上一节视频删除数据的话如果外键里设置了nullable=Flase,外键就设不了为空,主键自然也就删除不了,没有给nullable=Flese的话外键值会设置为NUll,然后会把主键的数据也给干掉的啊。

在本章视频中老师并没有在外键里设置这个nullable类型,而是直接用delete就可以删除数据,删除的数据只是把指定的数据给删除,并没有把关联表的主键数据给删除,这是为什么呢,我已经懵圈了。

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

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = '123456'

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 Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50), nullable=False)
    #使用外键与主表关联一起
    uid = Column(Integer,ForeignKey("user.id"))

    author=relationship('User',backref='articles')  #cascade默认为save-update

#增加数据
def add_data():
    Base.metadata.drop_all() #删除表
    Base.metadata.create_all()  #重新创建表

    user = User(uname="momo")
    article = Article(title="华为5G")
    article.author = user
    session.add(article)
    session.commit()

#删除数据
def oper_data():
    article = session.query(Article).first()  #查找Article中的第一条数据
    session.delete(article)                   #删除
    session.commit()                          #提交

if __name__ == '__main__':
    # add_data()
    oper_data()

image.pngimage.png

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 30301楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术(旧) 30302楼

一、主要代码:

    1、python文件

#coding=utf-8
from tornado.ioloop import IOLoop
from tornado.web import RequestHandler
from tornado.web import Application
import MySQLdb

#创建与数据库的连接
def __getConn():
    return MySQLdb.connect(host='127.0.0.1',user='root',passwd='123',db='tronado',port=3306)
#显示注册界面
class IndexHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render('templates/register.html')
#实现注册
class RegisterHandler(RequestHandler):
    def initialize(self,conn):
        self.conn = conn

    def post(self, *args, **kwargs):
        #获取请求参数
        uname = self.get_argument('name')
        print uname
        pwd = self.get_argument('pwd')
        print pwd
        #实现在数据库插入数据
        try:
            cursor = self.conn.cursor()
            cursor.execute('insert into db_test1 values(null "%s","%s",now()'%(uname,pwd))
            self.conn.commit()
            self.write('注册成功!')
        except Exception as e:
            # self.conn.rollback()
            self.write('注册失败!')

app = Application([
    (r'/',IndexHandler),
    (r'/register/',RegisterHandler,{'conn':__getConn}),
])

if __name__ == '__main__':
    app.listen(8000)
    IOLoop.current().start()

    2、templates内代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>地下城与勇士注册界面</title>
</head>
<body>
    <div align="center">
        <h1>地下城与勇士注册界面</h1>
        <hr color="red" size="4px">
        <form action="/register/" method="post">
            <p>账&emsp;号:<input type="text" name="name"></p>
            <p>密&emsp;码:<input type="password" name="pwd"></p>
            <p><input type="submit" value="提交注册"></p>
        </form>

    </div>
</body>
</html>

二、数据库表

blob.png

blob.png

三、pycharm运行环境如下:

blob.png

四、存在问题,在网页提交数据后显示注册失败。

1、blob.png

2、blob.png

五、自己无法解决(代码检查过  没有写错)


Python 全系列/第十三阶段:高并发性能怪兽-Tornado 框架/Tornado 深入学习(旧) 30303楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 30305楼
Python 全系列/第一阶段:Python入门/函数和内存分析 30306楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 30308楼
Python 全系列/第七阶段:网页编程基础/jquery 30309楼

1699963864197.jpg

Python 全系列/第十五阶段:Python 爬虫开发/scrapy框架使用 30311楼
Python 全系列/第二阶段:Python 深入与提高/模块 30312楼
Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 30315楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637