我用的python3,可以使用mysql模块和pymsql模块,但是mysql.connector总是报错,体验非常差,
所以我用的是pymysql:
一般步骤为:
1.创建连接
2.获得光标对象
3.执行SQL语句
4.自己发挥的内容
5.关闭光标和连接对象
先看一下我们访问的表:
下面是代码;
import pymysql
#首先是打开数据库,这里注意参数要以键值对的形式写出,否则总是报错
mydb=pymysql.connect(
host="localhost",
port=3310,
user= "root",
passwd="root",
db="pdbc-db",
charset="utf8")
#创建游标,设置操作为字典类型,fetchall返回的,是一个嵌套着字典的列表,字典的键即为列名称
#[{'id': 123456, 'songname': "'you belong with me'", 'authorname': "'taylor swift'", #'time': 3},
#{'id': 123457, 'songname': "'22'", 'authorname': "'taylor swift'", 'time': 2},
#{'id': 123458, 'songname': "'marry you'", 'authorname': "'bruno mars'", 'time': 3}]
cursor=mydb.cursor(cursor=pymysql.cursors.DictCursor)
#一般的创建游标,fetchall返回的是一个元组(内部还要嵌套元组)
#((123456, "'you belong with me'", "'taylor swift'", 3),
#(123457, "'22'", "'taylor swift'", 2),
#(123458, "'marry you'", "'bruno mars'", 3))
#cursor=mydb.cursor()
#执行SQL语句
try:
cursor.execute("select * from music ")# 返回的值是受影响数据的条数
#用fetchall返回全部结果,然后自己遍历这个全部结果
resultset=cursor.fetchall()
print(resultset)
for row in resultset:
print(row)
# fetchone获取单个(下一个)结果行,我觉得一般在SQL语句返回值为单一语句时使用它,
# 再或者是你有特殊的需求只看一行数据的时候使用它
row=cursor.fetchone()
print(row)
# fetchmany():应该是返回从第一行开始的第几行数据,如果你输入的函数大于总行数也不会报错,只是返
#回所有数据
reult = cursor.fetchmany(5)
print(reult)
cursor.scroll(1, 'absolute') # 绝对移动:相对于文件起始位置,向后移动一组数据
cursor.scroll(1,'relative') # 相对移动,相对于当前位置,向后移动一个位置
cursor.scroll(-1) # 游标 相对移动到当前位置的前一条数据位置
#rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
#.commit():提交到数据库执行,增和改单单执行excute并不会真正影响到数据,需要再执行.commit()才
#可以完成真正的增改
except:
mydb.rollback()#当有两个或多个操作因其他原因只完成部分操作而未能执行完全部操作导致的数据不安
#全问题,可以对表数据中的增改进行撤销处理。
cursor.close()
mydb.close()