一.Pymysql
import pymysql #python2.X 中是 mysqldb 和 pythonmysql 用法是一模一样的 #pymysql可以伪装成上面这两个模块 user = input('username: ') pwd = input('password: ') #连接数据库 conn = pymysql.connect(host='localhost',user='root',password='gkx321',database='db222') cursor = conn.cursor() #类似文件句柄。 比如conn是打开了一个柜子,cursor就是我们拿东西的手 # cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #设置为字典格式,fetch的时候可以显示字段名,以字典形式 #注意以后绝对不要这么拼接 # sql = "select * from userinfo where username='%s' and password = '%s' "%(user,pwd) # username: uu' or 1=1 -- # password: gkx # (1, 'gkx', 'gkx123') # 登陆成功 #正确方式 sql = "select * from userinfo where username = %s and password = %s " #三种方式 元组,列表,字典 # cursor.execute(sql) cursor.execute(sql,(user,pwd)) #执行语句 ,末尾加不加逗号都行 #r = cursor.execute(sql,(user,pwd)) #有个返回值,表示受影响的行数 # cursor.execute(sql,[user,pwd]) # sql = "select * from userinfo where username = %(u)s and password = %(p)s " # cursor.execute(sql,{'u':user,'p':pwd}) ret = cursor.fetchone() #fetchone类似 readline 运行一次,只读取一行。 print(ret) cursor.close() conn.close() if ret: print('登陆成功') else: print('登陆失败')
#总结 #查询需要 fetchone #更新和insert 需要 conn.commit() #create drop alter 只要 cursor.execute() import pymysql conn = pymysql.connect(host='localhost',user='root',password='gkx321',database='db222') # cursor = conn.cursor() #类似文件句柄。 比如conn是打开了一个柜子,cursor就是我们拿东西的手 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #设置为字典类型的 cursor ''' #增加 删除 改 # user = 'ccc' # pwd = 'ccc123' sql = "insert into userinfo(username,password) values(%s,%s)" # cursor.execute(sql,(user,pwd,)) cursor.executemany(sql,[('ww','ww123'),('aaa','aaa123')]) #增加多行,只适合insert时候用 # r = cursor.execute(sql,(user,pwd,)) #返回值,受影响的行数 conn.commit() #增删改 三种操作一定要 commit 不提交数据库不知道要修改 for 循环中 可以 全部execute后,再进行一次 commit ''' #查 sql = "select * from userinfo" cursor.execute(sql) # 既然fetchone像文件中的readline,那么就有类似 tell和seek的语句: cursor.scroll(2,mode='relative') #根据当前位置,相对移动 .2表示从当前位置,选择下下行,自然1就是选择下一行了 cursor.scroll(2,mode='absolute') #根据绝对位置移动 2表示从第1行往后的2行,即表示选择第3行 #可以通过设置cursor,来让fetchone显示的时候,带上字段名,以字典形式 ret = cursor.fetchone() #只有查询的时候才需要 print(ret) ret = cursor.fetchone() print(ret) ret = cursor.fetchall() print(ret) # # ret1 = cursor.fetchall() #返回一个元组,每条数据又是一个元组 # print(ret1) #要注意的是,尽量还是要用sql语句操作,因为比如fetchall/fetchmany 会把所有数据放到内存中来,比如10万条数据,那么是相当占内存的 #还是建议用 sql中的 limit 分页 # ret1 = cursor.fetchall() # ret2 = cursor.fetchmany(3) cursor.close() conn.close()
#新插入数据的自增id cursor.lastrowid import pymysql conn = pymysql.connect(host='localhost',user='root',password='gkx321',database='db222') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "insert into userinfo(username,password) values('ddd','ddd123')" cursor.execute(sql) print(cursor.lastrowid) # #获取插入数据的自增id #那如果是插入多行呢,也只获取最后一行的 自增id,所以有需要外键的话,只能一个个插入再获取 conn.commit() cursor.close() conn.close()
import pymysql import sys conn = pymysql.connect(host='localhost',user='root',password='gkx321',database='db222') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) def select(sql,cursor,conn): ret = cursor.execute(sql) print('受影响行数为%s行'%ret) ret2 = cursor.fetchall() return ret2 def drop(sql,cursor,conn): ret = cursor.execute(sql) return '