模块说明
- pymysql模块是通过游标操作数据库的,除了查询语句以外,增删改都需要commit提交语句才能生效。当然,也可以设置事物自动提交。
connect.autocommit(True) #connect为创建链接变量
安装模块,cmd终端命令行:pip3 install pymysql
导入模块import pymysql
创建链接
connect = pymysql.connect(
host = 'localhost', #数据库服务器地址,默认localhost
user = 'root', #用户名,默认为当前程序运行用户
password = '123456', #登录密码,默认为空字符串
database = 'yy', #默认操作的数据库
port = 3306, #数据库端口,默认为3306,注意这里传入的是整数
charset = 'utf8') #数据库编码
游标
pymsql操作数据库是通过游标操作的。
游标类型:
- Cursor:默认,返回元组类型
- DictCursor:字典类型
- SSCursor:无缓冲元组类型
- SSDictCursor:无缓冲字典类型
'''通过cursor参数指定游标类型,也可以在创建链接时指定cursorclass参数,参数内容跟这里的cursor一样。'''
cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)
关闭游标、关闭链接
使用后记得关闭链接,可用with语句
connect.close() #关闭链接
cursor.close() #关闭游标
提交事务
增删改时提交才生效
connect.commit()
事务回滚
connect.rollback()
执行sql语句
比如:增删改查等语句, args可以是tuple、list、dict,通过args传参可以防止sql注入,sql的null传参:None。
- cursor.execute(sql, args) 执行单条语句
- cursor.executemany(sql, args) 可以批量执行
'''cursor.execute'''
cursor.executemany('insert into qq_name values(567,"test")')
connect.commit()
'''cursor.executemany'''
try:
cursor.executemany('insert into qq_name values(%s,%s)',((567,'g'),(789,'y')))
connect.commit()
print('Done!')
except Exception as e:
connect.rollback() #发生错误时回滚。
print('似乎发生了意外的事情~~')
finally:
connect.close() #关闭数据库链接
移动游标
'''相对当前位置移动'''
cursor.scroll(1, mode='relative')
'''相对绝对位置移动'''
cursor.scroll(2, mode='absolute')
查询相关
table = cursor.execute("select * from user;")
'''fetchone:取出一条数据'''
for each in table: #遍历逐条取出数据记录
print(cursor.fetchone())
'''fetchmany(size):取出多条记录'''
cursor.fetchmany(2) #取出两条记录
cursor.scroll(1, mode='relative') #往下偏移一个位置
cursor.fetchmany(2) #取出第四条和第五条记录
'''fetchall():取出全部数据'''
cursor.fetchall()
'''rowcount:返回影响的行数,只读'''
cursor.rowcount
与pandas交互
# connect为pymysql创建的链接对象。
user = pd.read_sql('select * from user',connect)