Python2:python-mysqldb
Python3:pymysql
connection对象:
conn = connect(参数列表)
参数:
host:连接的mysql主机,如果本机是'localhost'
port:连接的mysql主机的端口,默认是3306
db:数据库的名称
user:连接的用户名
password:连接的密码
charset:通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码
方法:
close()关闭连接
commit()事务,所以更新语句需要提交才会生效
rollback()事务,放弃之前的操作
cursor()返回Cursor对象,用于执行sql语句并获得结果
cursor对象:执行sql语句
cursor1 = conn.cursor()
方法:
close()关闭
execute(operation [, parameters ])执行语句,返回受影响的行数。[parameters]可用于参数化(注意,不是字符串格式化)
cursor.execute('insert into students(name) values(%s)','alice')
fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
# next()执行查询语句时,获取当前行的下一行
fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
scroll(value[,mode])将行指针移动到某个位置
mode表移动方式,默认值relative:相对rownumber移动value行,value为正向下为负向上
mode值absolute,绝对位置
属性:
rowcount只读属性,表示最近一次execute()执行后受影响的行数
connection获得当前连接对象
rownumber当前游标所在行
import pymysql
cn = pymysql.connect(host='192.168.199.156', port=3307, db='py', user='root', password='123456', charset='utf8')
try:
with cn.cursor() as cur1:
# name=input("name:")
# gender = input("gender:")
result = cur1.execute('select * from students;')
print(1,result)
# # cur1.execute('insert into students(name,gender) values(%s,%s)',[name,int(gender)]) # sql字符串里统一用%s占位,参数输入对应的数据类型即可
print(cur1.fetchone())
print(cur1.fetchall())
print(cur1.rowcount)
print(cur1.rownumber)
cur1.scroll(-3, 'relative')
print(cur1.rownumber)
cur1.scroll(3, 'absolute')
print(cur1.rownumber)
cn.commit()
finally:
cn.close()
# try:
# conn=pymysql.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')
# cs1=conn.cursor()
# count=cs1.execute("delete from students where id=6")
# print count
# conn.commit()
# cs1.close()
# conn.close()
# except Exception,e:
# print e.message
class MysqlHelper():
def __init__(self, host, port, db, user, password, charset='utf8'):
"""实例化:记下参数"""
self.host = host
self.port = port
self.db = db
self.user = user
self.password = password
self.charset = charset
# 创建对象(connection、cursor)
def open(self):
self.conn = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, password=self.password,charset=self.charset)
self.cursor = self.conn.cursor()
# 关闭对象
def close(self):
self.conn.close()
self.cursor.close()
# 更新数据
def cud(self, sql, params):
try:
self.open()
self.cursor.execute(sql, params)
self.conn.commit()
self.close()
except Exception as e:
print(e.args)
# 查询数据
def retrieve_all(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
return result
except Exception as e:
print(e.args)
字符串有两种形式:Unicode字符形式(Python中的数据类型为str)和二进制形式(Python中数据类型为bytes)
网络传输用bytes形式,值的表示为b"xxxx"(xxxx只能为ASCII编码的字符串);
内存中字符串用Unicode字符形式
str.encode()→bytes,bytes.decode()→str
此外,Unicode字符还有各种编码标准:utf-8、GBK、GB2312等等
# hash加密:hashlib模块
import hashlib
sh1 = hashlib.sha1() # 实例化一个sha1函数加密的hash对象
sh1.update("原内容".encode(encoding='GB2312')) # 使用该对象加密hash文本
sh1.update(b"last add string") # 使用该对象加密hash文本
sh1.hexdigest() # 以16进制返回“原内容”(GB2312编码的二进制文本)拼接"last add string"(ASCII编码的二进制文本)加密后的内容
sh1.digest() # 以二进制返回加密后的内容
if __name__ == '__main__':
handler = MysqlHelper(host='192.168.199.156', port=3307, db='py', user='root', password='123456', charset='utf8')
handler.open()
print(handler.retrieve_all('select * from students where id > %s', [int(10)]))