python操作MySQL

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
    原文作者:CaesarsTesla
    原文地址: https://www.jianshu.com/p/ce44fa9d69e9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞