用python来操作MySQL,首先需要安装PyMySQL库(pip install pymysql)。
连接MySQL:
import pymysql 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=5 sql='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 in data.keys()]) #相当于id=%s,name=%s,age=%s sql=sql+update try: 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数据库+增删改操作的完整模板如下:
import pymysql connect = pymysql.connect(host='...', # IP地址 port=3306, # 端口号 user='...', # 用户名 password='...', # 密码 db='...', # 数据库名 charset='utf8') # 链接字符集 cursor = connect.cursor() # 创建游标 sql='...' try: cursor.execute(sql) # 执行SQL语句 connect.commit() # 提交事务 except Exception 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 in results: print(row)
fetchall()
会将结果以元组形式全部返回,如果数据量很大,那么占用的开销会非常高。因此,推荐使用如下方法来逐条读取数据:
row=cursor.fetchone() while row: print(row) row=cursor.fetchone()
总结来说,执行什么样的操作要根据SQL语句来定。因此需要学习好SQL的语法。