python 操作 mysql 用到的库是pymysql
pip install PyMySQL==0.9.3
通过这个类来说明python 操作mysql方式
首先DefaultConfig内容
DATABASES = {
'default': {
'NAME': 'XXXX', #数据库中要操作库的名字
'USER': 'XXXX', # mysql登陆用户名
'PASSWORD': 'XXXX', # mysql登陆密码
'HOST': 'XX.XXX.XXX.XX',# mysql服务器IP
'PORT': XXXX, # mysql服务端口号
}
}
import pymysql
from config import DefaultConfig
class MySqlserver(object):
def __init__(self,db):
"""
:param db: 数据库名称
:param host: 数据库IP
:param port: 数据库端口
:param username: 用户名
:param passwd: 密码
:param dbname: 库的名称
"""
if not DefaultConfig.DATABASES.get(db):
raise Exception("数据库不存在")
db_config = DefaultConfig.DATABASES.get(db)
self.host = db_config.get("HOST")
self.username = db_config.get("USER")
self.passwd = db_config.get("PASSWORD")
self.dbname = db_config.get("NAME")
self.port = db_config.get("PORT")
# 建表
def create_table(self,table_name,colums):
"""
创建表使用
:param sql: 执行的建表语句
:param table_name: 表名字
:param colums: 表中列的名称与类型[["name","varchar(20)"],["age","int"]]
:return:
"""
#链接数据库
db = pymysql.connect(host=self.host, user=self.username, password=self.passwd,
database=self.dbname, port=self.port)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS {}".format(table_name))
# 拼接sql语句
words = "id int primary key not null auto_increment,"
for colum in colums:
words += "{} {},".format(colum[0],colum[1])
sql = "CREATE TABLE {}({})".format(table_name,words[:-1])
cursor.execute(sql)
db.close()
def insert_update_delete(self,sql):
"""
插入,更新,删除操作
:param sql: 执行的sql语句
:return:None
"""
db = pymysql.connect(host=self.host, user=self.username, password=self.passwd,
database=self.dbname, port=self.port)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
sql = sql
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 发生错误时回滚
db.rollback()
# 关闭连接
db.close()
def query(self,sql,key_list,type=None,size=None):
"""
查询数据库
:param sql: 查询语句
:param key_list: 结果列的关键字
:param type:单条查询,多条查询,全部查询
:param key_list: 多条查询时查询个数
:return: [{"key1":"result1","key2":"result2"},{"key1":"result1","key2":"result2"}]
"""
db = pymysql.connect(host=self.host, user=self.username, password=self.passwd,
database=self.dbname, port=self.port)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
sql = sql
result_list = []
try:
# 执行SQL语句
cursor.execute(sql)
if not type or type == "all":
results = cursor.fetchall()
print(results)
if len(results[0]) != len(key_list):
raise Exception("查询列与结果列数量不符")
for result in results:
result_list.append(dict(zip(key_list,result)))
elif type=="one":
result = cursor.fetchone()
result_list.append(dict(zip(key_list, result)))
else:
if size:
results = cursor.fetchmany(int(size))
for result in results:
result_list.append(dict(zip(key_list, result)))
else:
raise Exception("size 错误")
# 提交修改
db.commit()
except Exception as e:
db.rollback()
raise Exception(e)
# 关闭连接
db.close()
return result_list
def batch(self,sql_list):
"""
插入,更新,删除操作
:param sql: 执行的sql语句
:return:None
"""
db = pymysql.connect(host=self.host, user=self.username, password=self.passwd,
database=self.dbname, port=self.port)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
sql_list = sql_list
try:
# 执行SQL语句
for sql in sql_list:
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 发生错误时回滚
db.rollback()
# 关闭连接
db.close()
if __name__ == "__main__":
mysqlclient = MySqlserver("default")
# 全部查询
#sql = "select id , userid from resume_resumetable"
#print(mysqlclient.query(sql,["id","userid"]))
# 建表语句
#mysqlclient.create_table("test",[["name","varchar(20) default 'aa'"],["age","int not null"]])