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
网友评论