MySQL之pymysql模块
MySQL的pymysql模块
在Python中,使用该模块是对数据库进行操作的(SQL语句)
在python2中不仅仅有pymysql,还有mysqlDB,这两个模块的功能是一样的。
安装pymysql模块:
pip3 install pymysql
python连接mysql方法一:问题,会被sql注入。
import pymysql username = input("input your username or Email:") password = input("input your Password") def pymysqlconnect(*args,**kwargs): """ mysql连接 :param args: :param kwargs: :return: """ conn = pymysql.connect(host='localhost',user='root',password='XXXXXX',database='dbtest') # 创建mysql连接 cursor = conn.cursor() # 创建mysql连接游标 sql = "select * from userinfo where username = '%s' and password = '%s'" %(username,password,) print(sql) cursor.execute(sql) # 执行sql语句 result = cursor.fetchone() print(result) # fetchone 只拿取第一条数据 cursor.close() # 关闭游标 conn.close() # 关闭连接 pymysqlconnect()
python连接mysql方法二:解决sql注入问题,将username和password写在execute里面,写成列表的形式。
import pymysql username = input("input your username or Email:") password = input("input your Password") def pymysqlconnect(*args,**kwargs): """ mysql连接 :param args: :param kwargs: :return: """ conn = pymysql.connect(host='localhost',user='root',password='XXXXXX',database='dbtest') # 创建mysql连接 cursor = conn.cursor() # 创建mysql连接游标 sql = "select * from userinfo where username = %s and password = %s" # print(sql) cursor.execute(sql,[username,password]) # 执行sql语句 result = cursor.fetchone() print(result) # fetchone 只拿取第一条数据 cursor.close() # 关闭游标 conn.close() # 关闭连接 if result: print('welcome the world') else: print('your username or password is error') pymysqlconnect()
python连接mysql方法三:解决sql注入问题,也可以用字典的形式,将username和password写在execute里面。
sql = "select * from userinfo where username = %(u)s and password = %(p)s" print(sql) cursor.execute(sql,{'u':username,'p':password})
cursor.execute和cursor.executemany都有一个返回值,r=cursor.execute和r=cursor.executemany,这个r表示的是受影响的行数。
pymysql的增删改查操作:注意,增删改 操作必有的一步是commit(),conn.commit()。不然是提交不到数据库的。
1、增:insert操作
import pymysql def pymysqlconnect(*args,**kwargs): conn = pymysql.connect(host='localhost',user='root',password='XXXXXX',database='dbtest') cursor = conn.cursor() sql = "insert into userinfo(username,password) values('jessica','123')" print(sql) cursor.execute(sql) conn.commit() cursor.close() conn.close() pymysqlconnect()
其他insert操作:
user = 'alex' pwd = '123' conn = pymysql.connect(host='localhost',user='root',password='XXXXXX',database='dbtest') cursor = conn.cursor() sql = "insert into userinfo(username,password) values(%s,%s)" print(sql) cursor.execute(sql,[user,pwd]) #也可以用元祖(user,pwd) conn.commit() cursor.close() conn.close()
用executemany插入多条数据:
conn = pymysql.connect(host='localhost',user='root',password='Wangzhe9251',database='dbtest') cursor = conn.cursor() sql = "insert into userinfo(username,password) values(%s,%s)" print(sql) cursor.executemany(sql,[('egon','222'),('sir','111')]) #列表里加元祖,可以添加多条数据 conn.commit() cursor.close() conn.close()
2、删:delete操作和insert操作相同。
3、改:update操作和insert操作相同。
4、查: select操作,fetchone()、fetchmany()和fetchall(),fetchmany()可以加参数,表示一次可以去多少。
例如fetchmany(4) 一次去4个值。fetchall()是拿全部。
fetchall()默认拿到的是元祖数据,元祖里面有元祖。但是,也可以拿字典数据。
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #这样就可以拿到字典数据,是列表里套字典。 sql = "select * from userinfo" cursor.execute(sql) result = cursor.fetchall()
print(result)
新插入数据的自增ID:cursor.lastrowid
conn = pymysql.connect(host='localhost',user='root',password='XXXXXX',database='dbtest') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "insert into userinfo(username,password) values('root','123')" cursor.execute(sql) conn.commit() print(cursor.lastrowid) #新插入数据的自增ID cursor.close() conn.close()
----- END -----