pymysql

import pymysql
user= input('用户名:>>').strip()
pwd= input('密码:>>').strip()

#先连接,拿到游标
conn=pymysql.connect(host='localhost',user='root',password='123456',
             database='day47',charset='utf8')
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql
sql='select * from user where user="%s" and password="%s";'%(user,pwd) print(sql) #注意%s须要加双引号
rows = cursor.execute(sql)  #拿到受影响的行数

cursor.close()
conn.close()

if rows:
    print('登陆成功')
else:
    print('登陆失败')

一、防注入mysql

如上咱们采用字符串拼接的形式生成sql语句。可是当存在 -- 时有可能对后面的语句造成干扰。sql

当面临这种状况时,用execute作字符串拼接ide

import pymysql
user="egon1"
pwd= 123
#先连接,拿到游标
conn=pymysql.connect(host='localhost',user='root',password='1234',
database='ls',charset='utf8') cursor=conn.cursor() #拿到游标,即mysql > sql="select * from std where name=%s and password=%s;" row_count=cursor.execute(sql,[user,pwd]) print(row_count) conn.commit() cursor.close() conn.close() ..............其中()【】均可以使用

 

 

  • 改 须要commit才会完成
  • 与sql语句基本一致

 

 

当我查找数据时,会返回不少内容,咱们须要经过fetchone,fetchmany,fetchall来得到消息fetch

import pymysql
user="egon16"
pwd= 123
#先连接,拿到游标
conn=pymysql.connect(host='localhost',user='root',password='1234',
               database='ls',charset='utf8')

cursor=conn.cursor()
sql='select * from stu;'
rows = cursor.execute(sql)
默认是元组类型,
((1, 'ssss', 123), (2, 'xixi', 123), (3, 'aaa', 456), (4, 'ttt', 147), (5, 'xix;i', 123), (6, 'aa;a', 456), (7, 't;tt', 147), (8, 'xigx;i', 123), (9, 'aa;a', 456), (10, 't;tgt', 147), (11, '', 123))

若是想得到字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
结果:
[{'password': 123, 'id': 1, 'name': 'ssss'}, {'password': 123, 'id': 2, 'name': 'xixi'}, {'password': 456, 'id': 3, 'name': 'aaa'}, {'password': 147, 'id': 4, 'name': 'ttt'}, {'password': 123, 'id': 5, 'name': 'xix;i'}, {'password': 456, 'id': 6, 'name': 'aa;a'}, {'password': 147, 'id': 7, 'name': 't;tt'}, {'password': 123, 'id': 8, 'name': 'xigx;i'}, {'password': 456, 'id': 9, 'name': 'aa;a'}, {'password': 147, 'id': 10, 'name': 't;tgt'}, {'password': 123, 'id': 11, 'name': '的'}]
数据类型
#查单条fetchone
# res1=cursor.fetchone()
# res2=cursor.fetchone()
# res3=cursor.fetchone()
# print(res1)
# print(res2)
# print(res3)
# print(res3[0])
#查多条fetchmany
# print(cursor.fetchmany(3))
# print(cursor.fetchone())
#查全部fetchall
# print(cursor.fetchall())
# print(cursor.fetchone())

#-------光标的移动--------
#1.绝对路径:从文件的开头位置算起
# print(cursor.fetchall())
# cursor.scroll(1,mode='absolute')
# print(cursor.fetchone())
# cursor.scroll(3,mode='absolute')
# print(cursor.fetchone())

#2.相对路径:
print(cursor.fetchone())
print(cursor.fetchone())
cursor.scroll(2,mode='relative') #相对于上面的两条向后移两条
print(cursor.fetchone())

print('%s row in set (0.00 sec)' %rows)
cursor.close()
conn.close()
------查看表中最后一行的iD
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='123456',
             database='day47',charset='utf8')
cursor=conn.cursor()


sql='insert into user1(user,password) values(%s,%s);'
rows=cursor.execute(sql,('alex','123'))
# rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')])
conn.commit()
print(cursor.lastrowid)  #查看表中最后一行的iD

cursor.close()
conn.close()
获取插入的最后一条数据的自增ID

 

 

 

存储过程:

import pymysql

# 建立链接
conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='1234',db='ls',charset='utf8')
# 建立游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# cursor = conn.cursor()



# 无参数存储过程
cursor.callproc('p2')  # 等价于cursor.execute("call p2()")

# 获取执行完存储的参数,参数@开头
cursor.callproc('p1',args=(1,22,))
cursor.execute("select @p1,@_p1_1,")  # {u'@_p1_1': 22, u'@p1': 1, }

# 执行SQL,并返回收影响行数
effect_row = cursor.execute("select * from stu")
res1 = cursor.fetchall()
print(res1)

# 提交,否则没法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭链接
conn.close()

 

使用with简化链接过程spa

import pymysql
import contextlib


# 定义上下文管理器,链接后自动关闭链接
@contextlib.contextmanager
def mysql(host='127.0.0.1',port=3306,user='root',passwd='1234',db='ls',charset='utf8'):
    conn = pymysql.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset)
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    try:
        yield cursor
    finally:
        conn.commit()
        cursor.close()
        conn.close()


# 执行sql
with mysql() as cursor:
    print(cursor)
    row_count = cursor.execute("select * from stu")
    row_1 = cursor.fetchone()
    print(row_count,row_1)

 

import pymysql
conn = pymysql.connect(host = 'localhost',user = 'root',password='123456',database = 'lianxi',charset = 'utf8')
cursor = conn.cursor(pymysql.cursors.DictCursor)  #以字典的形式输出
# rows = cursor.callproc('p1')  #1.调用存储过程的方法 ,没参数时
# rows = cursor.callproc('p2',args=(3,7))  #有参数时
rows = cursor.callproc('p3', args=(3,7,123))  #@_p3_0=3,@_p3_1=7 ,@_p3_2=123  #有参数时
conn.commit()  #执行
print(cursor.fetchall())
cursor.execute('select @_p3_0,@_p3_1,@_p3_2')
print(cursor.fetchall())
cursor.close()
conn.close()
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息