python mysql pymysql_用Python操作MySQL(pymysql)

用python来操作MySQL,首先需要安装PyMySQL库(pip install pymysql)。

连接MySQL:

importpymysql

connect=pymysql.connect(host='localhost',user='root',password='xxxx',port=3306)

注:此时还未创建数据库,如已创建数据库,在连接时需再加上一个参数db。

注:host为指定的连接服务器的地址,设置为'localhost'代表连接到本地的MySQL服务上,user为用户名,password为密码,port为指定的端口(默认为3306)。

创建游标:(我们需要用游标来执行各种操作)

cursor=connect.cursor()

关闭游标:

cursor.close()

关闭连接:

connect.close()

执行单条sql语句:

cursor.execute(...)

执行多条sql语句:

cursor.executemany(...)

提交事务:

connect.commit()

回滚事务:

connect.rollback()

在Python中对数据库进行增删改等操作使用的是事务处理,因此在执行增删改SQL语句后,需要提交事务才能在数据库中完成操作,并且还需添加错误判断,当执行SQL语句失败后,需要对事务进行回滚。增删改模板如下:

sql='...'try:

cursor.execute(sql)

connect.commit()except:

connect.rollback()

创建数据库:

cursor.execute("CREATE DATABASE db_test DEFAULT CHARACTER SET utf8") #创建名为db_test的数据库

选择数据库:

connect.select_db('db_name')

创建表:

sql='CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL,name VARCHAR(255)\

NOT NULL,age INT NOT NULL,PRIMARY KEY(id))' #创建一个名为students的数据表,分为id,name和age三列,其中id为主键

cursor.execute(sql)

插入数据:

id='001'name='Hu'age=5sql='INSERT INTO students(id,name,age) VALUES (%s,%s,%s)'

try:

cursor.execute(sql,(id,name,age))

connect.commit()except:

connect.rollback()

修改数据:

sql='UPDATE students SET age=%s WHERE name=%s'

try:

cursor.execute(sql,(4,'Hu'))

connect.commit()except:

connect.rollback()

更新数据(如果数据存在,则更新数据,如果数据不存在,则插入数据):

data={'id':'002','name':'Bo','age':11}#为了方便修改数据,把数据以字典形式传入,这样就不需要修改sql语句了

table='students'keys=','.join(data.keys())

values=','.join(['%s']*len(data))

sql='INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table,keys=keys,values=values)#相当于INSERT INTO students(id,name,age) VALUES (%s.%s,%s) ON DUPLICATE KEY UPDATE

update=','.join(["{key}=%s".format(key=key) for key indata.keys()])#相当于id=%s,name=%s,age=%s

sql=sql+updatetry:

cursor.execute(sql,tuple(data.values())*2)

connect.commit()print("Sucessful")except:

connect.rollback()print("Failed")

删除数据:

sql='DELETE FROM xxx WHERE ...'

try:

cursor.execute(sql)

connect.commit()except:

connect.rollback()

连接MySQL数据库+增删改操作的完整模板如下:

importpymysql

connect= pymysql.connect(host='...', #IP地址

port=3306, #端口号

user='...', #用户名

password='...', #密码

db='...', #数据库名

charset='utf8') #链接字符集

cursor= connect.cursor() #创建游标

sql='...'

try:

cursor.execute(sql)#执行SQL语句

connect.commit() #提交事务

exceptException as e:

connect.rollback()#如果发生错误,则回滚事务

finally:

cursor.close()#关闭游标

connect.close() #关闭数据库

查询数据:

sql='SELECT * FROM xxx WHERE ...'cursor.execute(sql)

获取查询结果的条数:

cursor.rowcount

获取第一条数据:(元组形式)

cursor.fetchone()

获取所有数据:

cursor.fetchall()

获取指定数量的数据:

cursor.fetchmany(num)

逐条获取数据:

results =cursor.fetchall()for row inresults:print(row)

fetchall()会将结果以元组形式全部返回,如果数据量很大,那么占用的开销会非常高。因此,推荐使用如下方法来逐条读取数据:

row=cursor.fetchone()whilerow:print(row)

row=cursor.fetchone()

总结来说,执行什么样的操作要根据SQL语句来定。因此需要学习好SQL的语法。

你可能感兴趣的:(python,mysql,pymysql)