python与数据库的连接
python3不支持mysqldb(python2支持),使用pymysql代替
但也有说法 https://blog.csdn.net/liuweiyuxiang/article/details/80666773
这里用pymysql
操作流程
- 创建connection
- 获取cursor
- 执行增删改查的操作
- 处理数据
- 关闭cursor
- 关闭connection
创建connection
import pymysql.cursors HOST = '127.0.0.1' PORT = 3306 USER = 'root' PASSWD = 'root' DB = 'hxx_test' CHARSET = 'utf8' #pymysql.cursors.DictCursor connection = pymysql.connect(host=HOST, port=PORT, user=USER, passwd=PASSWD, db=DB, charset=CHARSET)
返回的是cursor对象(游标对象)用于执行查询和获取结果
常用参数说明
获取cursor对象
cursor = connection.cursor()
典例
import pymysql.cursors HOST = '127.0.0.1' PORT = 3306 USER = 'root' PASSWD = 'root' DB = 'hxx_test' CHARSET = 'utf8' #pymysql.cursors.DictCursor connection = pymysql.connect(host=HOST, port=PORT, user=USER, passwd=PASSWD, db=DB, charset=CHARSET) try: cursor = connection.cursor() sql = "select * from my_first" cursor.execute(sql) result = cursor.fetchall() for data in result: print(data) except Exception:print("查询失败!") cursor.close() connection.close()
import pymysql.cursors conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='root', database='hxx_test', charset='utf8' ) cursor = conn.cursor() #解释一下, 这是在操作hxx_test数据库中的my_first这张表 # 插入sql; sql_insert = "insert into my_first (fds,fggtrh,qq,kkk) values (7,8,9,10)" # 更新sql; sql_update = "update my_first set qq = 99 where fds=33" # 删除sql; sql_delete = "delete from my_first where fds = 1" # 把一个事务放到一个try块里,如果出现异常就回滚; try: # 开启事务; conn.begin() cursor.execute(sql_insert) cursor.execute(sql_update) cursor.execute(sql_delete) # 确认提交; conn.commit() except Exception as e: # 若有异常就回滚; conn.rollback() cursor.close() conn.close()
操作的那个数据库是这样的
fetchone()和fetchall()
均用于cursor.excuate()之后
fetchone() :
返回单个的元组,也就是一条记录(row),如果没有结果 , 则返回 None
cu.execute("select user,password from user where user='%s'" %name)
arr= cur.fetchone() ----此时 通过 arr[0],arr[1]可以依次访问user,passwordfetchall() :
返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ()
cur.execute("select * from user")
注意:在MySQL中是null,而在Python中则是None
cursor.execute的参数
n=cursor.execute(sql,param)
param后跟的是sql语句本身和使用的参数列表
之前sql语句中的哪些%s占的位就是那一系列v.get()的值
一次执行多条sql语句