美文网首页
pymysql操作MySQL

pymysql操作MySQL

作者: CaesarsTesla | 来源:发表于2017-12-04 15:32 被阅读44次

    python操作MySQL

    pip3 install pymysql下载到本地并解压到执行目录

    pypi是一个组织

    pymysql操作数据库

    #coding:utf-8
    
    import os,pymysql
    
    server="localhost"
    user="root"
    password="000000"
    
    #创建连接
    conn=pymysql.connect(server,user,password,database="db1",charset='utf8')
    #创建游标,
    cursor=conn.cursor()
    
    #执行SQL,返回影响的行数
    effect_row = cursor.execute("insert course (cname)values('语文')")
    
    #提交,不然无法保存新建或者修改的数据
    conn.commit()
    
    #关闭连接
    conn.close()
    
    

    执行的结果是给course表添加了一个语文的列

    • [ ] 一、数据库操作之-------增
    • 1、 ==禁止使用这种方式==
    sql = "insert course (cname)values('%s')"
    inp = input('请输入班级:')
    sql = sql % (inp)
    eff_row = cursor.execute(sql)
    
    
    • 2、
    inp = input('请输入班级')
    eff_row = cursor.execute('insert course (cname)values(%s)',inp)
    
    

    如果插入多个字段值的话,需要使用元组的形式

    cname = input('请输入班级')
    teac_id = input('请输入老师的id')
    eff_row = cursor.execute('insert course (cname,teach_id)values(%s,%s)',(cname,teac_id))
    

    如果插入多个值的话,需要使用元组或者列表的形式(包含着元组)

    ==注意使用的是cursor.executemany()==

    l = [
        ('生物',6),
        ('历史',7),
        ('地理',8)
    ]
    eff_row = cursor.executemany('insert course (cname,teach_id)values(%s,%s)',l)
    
    
    • [ ] 二、数据库操作之-------改
    eff_row = cursor.execute('update course set cname=%s where cid=%s',('马克思',8))
    
    • [ ] 二、数据库操作之-------查

    ==fetchmany()== 可以指定个数
    ==fetchone()==

    eff_row = cursor.execute('select * from course')
    
    print(cursor.fetchall())
    

    打印的结果:((1, '生物', 1), (2, '体育', 1), (3, '物理', 2), (4, 'è¯\xadæ–‡', None), (5, '语文', None), (6, '语文', None), (7, '数学', None), (8, '马克思', None), (9, '政治', 4), (10, '生物', 6), (11, '历史', 7), (12, '地理', 8))

    游标的操作,数值改成负数就可以向前移动

    cursor.scroll(0,mode='absolute') #绝对位置移动
    cursor.scroll(1,mode='relative')#相对位置移动
    

    SQL注入

    sql = 'select * from course where cid="%s"'
    sql = sql % ('--1" or "1==1')
    print(sql)
    effect_row = cursor.execute(sql)
    print(cursor.fetchall())
    

    下面是打印的结果

    select * from course where cid="--1" or "1==1"
    /Users/mudy/Library/Python/3.5/lib/python/site-packages/pymysql/cursors.py:166: 
    Warning: (1292, "Truncated incorrect INTEGER value: '1==1'")
      result = self._query(query)
    ((1, '生物', 1), (2, '体育', 1), (3, '物理', 2), (4, 'è¯\xadæ–‡', None), (5, '语文', 
    None), (6, '语文', None), (7, '数学', None), (8, '马克思', None), (9, '政治', 4), (10, 
    '生物', 6), (11, '历史', 7), (12, '地理', 8))
    
    

    更改游标的类型,这样的话,打印出来的结果就是字典了

    cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
    
    [{'teach_id': 1, 'cname': '生物', 'cid': 1}, {'teach_id': 1, 'cname': '体育', 'cid':
    2}, {'teach_id': 2, 'cname': '物理', 'cid': 3}, {'teach_id': None, 'cname': 
    'è¯\xadæ–‡', 'cid': 4}, {'teach_id': None, 'cname': '语文', 'cid': 5}, {'teach_id': 
    None, 'cname': '语文', 'cid': 6}, {'teach_id': None, 'cname': '数学', 'cid': 7}, 
    {'teach_id': None, 'cname': '马克思', 'cid': 8}, {'teach_id': 4, 'cname': '政治', 
    'cid': 9}, {'teach_id': 6, 'cname': '生物', 'cid': 10}, {'teach_id': 7, 'cname': 
    '历史', 'cid': 11}, {'teach_id': 8, 'cname': '地理', 'cid': 12}]
    
    
    cursor.lastrowid 
    获取最后一行的自增id
    

    相关文章

      网友评论

          本文标题:pymysql操作MySQL

          本文链接:https://www.haomeiwen.com/subject/wijxixtx.html