数据库MySql python读取插入数据,insert对那些类型加单引号,表单自己参考自己(外键),空值和NULL

2023-10-28

今天做了下数据库作业,好多出错,记录下,查漏补缺
本次只是实现一个employee表单,特殊在有一个外键参考自身主键,并且老师给的数据该外键可为null
在这里插入图片描述

表结构直接用workbench 里面构造的,Navicat还没解决不修改密码策略的条件下连接mysql8.
在这里插入图片描述
外键约束
在这里插入图片描述

然后根据给的数据,插入数据
在这里插入图片描述
先尝试直接在WORKbench里面用SQL语句插入

insert into employee (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Super_ssn,Dno) 
values('Franklin','T','Wong',333945555,STR_TO_DATE('08-DEC-1945', '%d-%b-%Y'),'638Voss,Houston,TX','M',null,adsdda,5);

我之前理解的插入数据加不加单引号的规则是:

- 字符串类型的varchar,char,nvarchar,nchar,text,ntext,日期类型datetime都需要加单引号
- int,numeric,bit等数值型,逻辑型的不用加引号

但上面Super_ssn是VCARCHAR(9)类型,并且全是数字,可以不用加单引号,数据库学的太差了。。。。。。。

然后是关于Super_ssn的null值问题,因为他是外键并且参考自身的主键,还有NULL的存在,所以很特殊。
我们想要某一记录的Super_ssn是默认的空值,可以直接忽略该列,也可以像上面一样 直接是null 或者NULL 记住没有单引号,加上单引号可就是四个char值分别是N U L L 了。

然后我们如果想要查询Super_ssn是null值的时候,应该用is null 而不是=null …具体为啥我也有点懵。。。。实践了就是这样

在这里插入图片描述
在这里插入图片描述

import pymysql
import random


def insert(Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Super_ssn,Dno):
    conn = pymysql.connect(host='127.0.0.1'  # 连接名称,默认127.0.0.1
                           , user='root'  # 用户名
                           , passwd='root'  # 密码
                           , port=3306  # 端口,默认为3306
                           , db='get'  # 数据库名称
                           , charset='utf8'  # 字符编码
                           )
    cur = conn.cursor()  # 生成游标对象
    sql = "insert into employee (Fname,Minit,Lname,Ssn,Bdate,Address,Sex,Salary,Super_ssn,Dno) " + \
          "values('" + Fname + "','" + Minit + "','" + Lname + "','" + Ssn + \
          "'," + "STR_TO_DATE('" + Bdate + "', '%d-%b-%Y')" + ",'"+ Address + "','"+ Sex +\
          "'," + Salary + "," + Super_ssn + ",'"+ Dno+"');"
    print(sql)
    cur.execute(sql)  # 执行SQL语句
    conn.commit()  # 提交到数据库执行

    data = cur.fetchall()  # 通过fetchall方法获得数据
    print(data)

    cur.close()  # 关闭游标
    conn.close()  # 关闭连接
    ## https://www.bilibili.com/read/cv3418619/

with open("EMPLOYEE.txt", "r") as f:
    for line in f.readlines():
        line = line.strip('\n')  #去掉列表中每一个元素的换行符
        attribute=line.split(',')
        attribute[5]=attribute[5]+","+attribute[6]+","+attribute[7]
        attribute.pop(6)
        attribute.pop(6)
        length = len(attribute)

        for elemnet,i in zip(attribute,range(length)):
            get = elemnet.replace('\'', '')
            get = get.replace(' ', '')
            if(get=="null"):
                get="NULL"
            attribute[i]=get
        print(attribute)
        insert(attribute[0],attribute[1],attribute[2],attribute[3],attribute[4],attribute[5],attribute[6],attribute[7],attribute[8],attribute[9])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库MySql python读取插入数据,insert对那些类型加单引号,表单自己参考自己(外键),空值和NULL 的相关文章

随机推荐

  • H5使用hook实现网络连接情况判断

    最近使用hook写了一个小练习 作用就是判断网络的连接情况 并在连接情况变化的时候可以作出一系列的操作 话不多说 上代码 function useCheckOnline navigator onLine代表当前的网络连接情况 const o
  • 第六课:MAC去中心化钱包开发之备份私钥

    一 私钥 这节课继续将注册Token后的步骤 就是备份私钥 每个公链都会有私钥 但是不尽相同 MAC底层的私钥比较多 有4个 分别是 钱包钥匙 钱包钥匙是开启MAC钱包的必备信息之一 格式为mac三个字母开头的一长串字符 创建钱包账户后会提
  • 新人小白求助大佬

    本人在进行病例对照匹配 想要匹配比是1 2 匹配条件是年龄 3岁 孕周 3周 我之前用的R语言代码是MatchIt代码 代码如下 这个代码有两个问题 一个是匹配方法 method 中没有范围的选项 只能按照 nearest 或者 exact
  • Ubuntu18.04中修改Ubuntu的外观(菜单栏放到屏幕下方)

    因为用的synergy分屏使用 所以想要将Ubuntu18 04的左侧栏放到屏幕底部 因为鼠标在点击左侧另一个电脑侧边栏的时候会不小心点到 过程 安装gnome tweak tool感觉是最方便的 直接打开命令行 先安装配置工具 sudo
  • 第三回:布局格式定方圆

    文章目录 第三回 布局格式定方圆 一 子图 1 使用 plt subplots 绘制均匀状态下的子图 2 使用 GridSpec 绘制非均匀子图 二 子图上的方法 思考题 第三回 布局格式定方圆 import numpy as np imp
  • Vuejs实践--事件绑定

    Vue中的事件绑定一般通过v on指令来绑定事件 事件绑定 v on 事件绑定的表达式的值可以是js语句 也可以是在methods选项中定义好的方法名 有参数的时候当然需要传参 在vue事件中 如果要用到事件对象e 要将e作为形参传入函数
  • SpringBoot 之 MDC 实现全链路调用日志跟踪

    文章目录 日志拦截器 修改日志格式 trackId 丢失解决 日志拦截器 import com evcas charge pile platform common annotation LogNoTrace import com evcas
  • STM32 基础系列教程 18 – IWDG

    前言 学习stm32 独立看门狗 IWDG 接口使用 学会用STM32内部独立看门狗 IWDG 实现程序异常时自复位功能 STM32F10xxx内置两个看门狗 提供了更高的安全性 时间的精确性和使用的灵活性 两个看门狗设备 独立看门狗和窗口
  • 计算机网络——SOCKET、TCP、HTTP之间的区别与联系

    文章目录 一 Socket 1 什么是socket 2 为什么需要socket 3 建立socket连接 4 socket分类 二 HTTP 基于TCP 1 HTTP的概念 2 HTTP连接的特点 2 1 连接请求 一次连接 2 2 连接请
  • 专栏《乔新亮的CTO成长复盘》读书笔记(技术架构篇)

    架构决策能力不但非常关键 而且是技术管理者最重要的能力和职责之一 而且职级越高就越重要 很多所谓的 技术债 也就是由一次次的决策失误不断累加而成的 管理者要能充分利用自己的技术视野和业务认知提前做好预判和布局 也就是上医治未病 做 T 型人
  • 滑动谜题 -- BFS

    滑动谜题 输入 board 4 1 2 5 0 3 输出 5 解释 最少完成谜板的最少移动次数是 5 一种移动路径 尚未移动 4 1 2 5 0 3 移动 1 次 4 1 2 0 5 3 移动 2 次 0 1 2 4 5 3 移动 3 次
  • Python Selenium 基本使用(详细步骤)

    一 简介 Selenium 是一个 web 应用程序自动化测试工具 对各种浏览器都能很好地支持 包括 Chrome Firefox 这些主流浏览器 使用它可以模拟浏览器进行各种各样的操作 包括爬取一些网页内容 当看到浏览器自己运行并且在网页
  • QtConcurrent 线程使用说明

    关于Qt Concurrent 我们首先来看看Qt Assitant是怎么描述的 The QtConcurrent namespace provides high level APIs that make it possible to wr
  • 关于UE4 vs2017 SpawnActor编译通过,调试运行崩溃的问题

    在制作VR模式代码编写的时候 使用一些API采用UWorld SpawnActor的时候出现代码编译编译通过无报错 但是调试运行失败的原因 找了很久才找到原因 原来是构造器的问题 就是把SpawnActor放到到BeginPlay 中 不能
  • oracle全文索引之commit与DML操作

    我们知道 无论对多大的数据做DML操作 执行commit都可以很快完成 但如何删除建有全文索引的记录 在commit时可能会很慢 根据推断可以知道是由于域索引造成的 那么在有域索引的情况下 commit时 oracle还做了那些额外工作呢
  • chatgpt赋能python:Python求全排列的介绍

    Python求全排列的介绍 在计算机科学中 全排列是一种排列的形式 将一组元素按照固定的顺序安排 在Python中 可以使用递归和迭代来求解全排列问题 本文将介绍如何用Python求全排列以及如何在SEO方面优化文章 递归方法 递归方法是通
  • 新形势下,企业如何进行数字化转型 附下载地址

    2020年谈企业数字化转型 有一个不变和四个变 不变的是企业面临的整体宏观环境和企业 多年发展积累的运营模式和管理能力 因此企业数字化转型面临的固有难点依然存在 四个 变化因素是疫情影响 5G部署 人工智能 AI 加快应用 以及中美技术加速
  • springboot中 拦截器无法访问数据库解决方法

    在springboot中使用拦截器时 拦截器中还需要访问数据库 会出现实例化数据库访问对象失败的现象 不管是添加 Componse还是添加 Servie 或者 Configuration 均不可以 需要做如下处理 方法如下 1 在集成Web
  • yolov5环境搭建与pytorch中torch、torchvision、torchaudio安装

    python软件安装 可以不单独安装 2条消息 Python安装教程 2022最新 学Python的阿杜的博客 CSDN博客 安装anaconda3 2020 2对应的python版本为3 7 不推荐 2020 11对应的python版本为
  • 数据库MySql python读取插入数据,insert对那些类型加单引号,表单自己参考自己(外键),空值和NULL

    今天做了下数据库作业 好多出错 记录下 查漏补缺 本次只是实现一个employee表单 特殊在有一个外键参考自身主键 并且老师给的数据该外键可为null 表结构直接用workbench 里面构造的 Navicat还没解决不修改密码策略的条件