zoukankan      html  css  js  c++  java
  • 8_22数据库(navicat操作)

    补充:

      exist存在EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,True或False。

      当返回True时,外层查询语句将进行查询当返回值为False时,外层查询语句不进行查询。

    select * from emp
        where exists
        (select id from dep where id > 203);

    一。NAVICAT

      navicat是一个数据库管理工具,可以管理数据库,简化数据库的操作。

      下载地址:https://pan.baidu.com/s/1bpo5mqj

      navicat需要熟悉以下操作:

    #1. 测试+链接数据库
    #2. 新建库
    #3. 新建表,新增字段+类型+约束
    #4. 设计表:外键
    #5. 新建查询
    #6. 建立表模型
    
    #注意:
    批量加注释:ctrl+?键
    批量去注释:ctrl+shift+?键

       之前哪些语句都被navicat给封装了,点点鼠标就可以操作数据库。

      在这里要注意,建立数据库时要选择编码utf8,而utf8mb4可以存表情。

      设置主键的时候不要忘记自增选项:

    二。pymysql

      在pycharm中有专门与mysql连接的模块,就是pymysql。

      下载模块后,就可以编写语句连接数据库了:

    conn = pymysql.connect(
        host = '127.0.0.1',
        port = 3306,
        user = 'root',
        password = '123456',
        database = 'day38',
        charset = 'utf8'
    )

      导入模块之后,先使用connect关键字配置数据库连接,

      通过连接可以设置光标cursor执行语句:

    cursor = conn.cursor(pymysql.cursors.DictCursor)
    sql = 'select * from teacher'
    res = cursor.execute(sql)

      其中pymysql.cursors.DictCursor是将输出的结果打印成字典格式

      cursor.execute()执行SQL语句

      cursor.fetchone()取出一条语句

      cursor.fetchall()取出所有语句,以列表+字典形式输出

      cursor.scroll(1,‘absolute’)将光标滚动至第一条数据后,绝对位置

      cursor.scroll(1,‘relative‘)将光标向后滚动一行,相对位置

    三。sql注入问题。

      利用下述的方法,可以实现用户的注册于登录,但是原理是将用户直接输入的字符串拼接后放入sql语句中执行。

    name = input('用户名>>>:')
    pwd = input('密码>>>:')
    sql = "select * from user where name = '%s' and password = '%s'"%(name,pwd)
    res = cursor.execute(sql)
    if res:
        print(cursor.fetchall())

      但是,当用户输入一些sql特殊意义的字符也会照样执行,比如:‘or 1=1 -- ",就可以将用户所有的数据都打印出来,为了解决这方法,pymysql有特有的方法:

    name = input('用户名>>>:')
    pwd = input('密码>>>:')
    sql = "select * from user where name = %s and password = %s"
    res = cursor.execute(sql,(name,pwd))
    if res:
        print(cursor.fetchall())

      execute除了执行sql语句之外,还可以拼接sql中的%s字符串,可以自动识别sql中%s替换成输入的内容,而不需要“”

    四。pymysql增删查改问题

      在pycharm中使用增删改操作时,如果不加入conn.commit,就不能进行操作,需要加这个语句才行,而且每次操作都要使用。

    sql2 = "insert into user(name,password) values('lzx32','1233')"
    res = cursor.execute(sql2)
    conn.commit()

      这样是比较烦的,但是可以设置自动的。

    conn = pymysql.connect(
        host = '127.0.0.1',
        port = 3306,
        user = 'root',
        password = '123456',
        database = 'day38',
        charset = 'utf8',
        autocommit = True
    )

      在连接中设置autocommit恒等于True就行。

  • 相关阅读:
    NX二次开发-UF_MODL_ask_angle_tolerance获取建模的角度公差
    NX二次开发-UF_MODL_create_bplane创建有界平面
    NX二次开发-UF_MODL_ask_point_containment获取一个点是在体(面,边)的边界内部,外部,还是边界上
    NX二次开发-UFUN获取相邻面UF_MODL_ask_adjac_faces
    NX二次开发-UFUN链表UF_MODL_create_list等用法
    NX二次开发-UFUN发射线函数UF_MODL_trace_a_ray的用法
    NX二次开发-Ufun C函数例子目录【更新日期2020.7.5】
    NX二次开发-C++time函数计时
    NX二次开发-C++的vector用法
    关于C++里set_intersection(取集合交集)、set_union(取集合并集)、set_difference(取集合差集)等函数的使用总结
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/11395310.html
Copyright © 2011-2022 走看看