在python项目中的数据库使用时,为了方便,我直接将pymysql库提供的接口封装成单独的函数实现,创建数据库和表,初始化,连接数据库,断开数据库,执行操作,查询操作。
1.创建库和表
# 创建数据库
def build(self):
# 创建连接
conn = pymysql.connect(host='localhost', user='用户名', password='密码', charset='utf8mb4')
# 创建游标
cursor = conn.cursor()
# 创建数据库的sql(如果数据库存在就不创建,防止异常)
sql = "CREATE DATABASE IF NOT EXISTS kongqikaiguan"
# 执行创建数据库的sql
cursor.execute(sql)
# 链接建好的数据库
cursor.execute('use kongqikaiguan')
# 创建开关节点配置表
sql_2 = '''CREATE TABLE IF NOT EXISTS `kaiguanjiedian` (
`开关节点装置序号` varchar(255) NOT NULL ,
`所属测量点号` varchar(255) ,
`通信速率及端口号` varchar(255) ,
`通信协议类型` varchar(255) ,
`通信地址` varchar(255) ,
`通信密码` varchar(255) ,
`电能费率个数` varchar(255) ,
`有功电能示值整数位及小数位个数` varchar(255),
`所属采集器通信地址` varchar(255),
`用户大类号及用户小类号` varchar(255),
`zdlb` varchar(255),
PRIMARY KEY (`开关节点装置序号`)
)
'''
cursor.execute(sql_2)
# 创建终端表
sql_2 = '''CREATE TABLE IF NOT EXISTS `zd` (
`zdlb` varchar(255) NOT NULL,
PRIMARY KEY (`zdlb`)
)
'''
cursor.execute(sql_2)
# 关闭数据库链接
cursor.close()
conn.close()
2.初始化,获得连接数据库的信息
def __init__(self, host, user, password, database, port=3306, charset='utf8'):
# 创建数据库和表
self.build()
# 初始化赋值
self.host = host
self.port = port
self.user = user
self.password = password
self.database = database
self.charset = charset
3.打开和关闭数据库
# 连接数据库函数
def open(self):
self.conn = pymysql.connect(host=self.host, port=self.port, database=self.database,
user=self.user, password=self.password, charset=self.charset)
self.cursor = self.conn.cursor()
# 关闭数据库
def close(self):
self.cursor.close()
self.conn.close()
4.执行操作和查询操作。因为执行的函数和查询函数不一样
# 执行 (增 删 改)
def execute(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
self.conn.commit()
self.close()
print('OK')
except Exception:
print("error")
# 查询所有
def select_all(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
return result
except Exception:
print("error")
# 查询第一个
def select_one(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchone()
self.close()
return result
except Exception:
print("error")
5.全部代码
import pymysql
class MysqlHelper(object):
def __init__(self, host, user, password, database, port=3306, charset='utf8'):
# 创建数据库和表
self.build()
# 初始化赋值
self.host = host
self.port = port
self.user = user
self.password = password
self.database = database
self.charset = charset
# 创建数据库
def build(self):
# 创建连接
conn = pymysql.connect(host='localhost', user='用户名', password='密码', charset='utf8mb4')
# 创建游标
cursor = conn.cursor()
# 创建数据库的sql(如果数据库存在就不创建,防止异常)
sql = "CREATE DATABASE IF NOT EXISTS kongqikaiguan"
# 执行创建数据库的sql
cursor.execute(sql)
# 链接建好的数据库
cursor.execute('use kongqikaiguan')
# 创建开关节点配置表
sql_2 = '''CREATE TABLE IF NOT EXISTS `kaiguanjiedian` (
`开关节点装置序号` varchar(255) NOT NULL ,
`所属测量点号` varchar(255) ,
`通信速率及端口号` varchar(255) ,
`通信协议类型` varchar(255) ,
`通信地址` varchar(255) ,
`通信密码` varchar(255) ,
`电能费率个数` varchar(255) ,
`有功电能示值整数位及小数位个数` varchar(255),
`所属采集器通信地址` varchar(255),
`用户大类号及用户小类号` varchar(255),
`zdlb` varchar(255),
PRIMARY KEY (`开关节点装置序号`)
)
'''
cursor.execute(sql_2)
# 创建终端表
sql_2 = '''CREATE TABLE IF NOT EXISTS `zd` (
`zdlb` varchar(255) NOT NULL,
PRIMARY KEY (`zdlb`)
)
'''
cursor.execute(sql_2)
# 关闭数据库链接
cursor.close()
conn.close()
# 连接数据库函数
def open(self):
self.conn = pymysql.connect(host=self.host, port=self.port, database=self.database,
user=self.user, password=self.password, charset=self.charset)
self.cursor = self.conn.cursor()
# 关闭数据库
def close(self):
self.cursor.close()
self.conn.close()
# 执行 (增 删 改)
def execute(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
self.conn.commit()
self.close()
print('OK')
except Exception:
print("error")
# 查询所有
def select_all(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
return result
except Exception:
print("error")
# 查询第一个
def select_one(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchone()
self.close()
return result
except Exception:
print("error")
6. 使用数据库封装的例子:
# 实例化数据库类的对象
sqlHelper = MysqlHelper('localhost', '用户名', '密码', '库名', 3306, 'utf8')
# 查询数据库
sql = "select zdlb from zd"
result = sqlHelper.select_all(sql)
# 删除数据库的内容
# 获得当前item空间内的文本内容
delete_item = self.listWidget.currentItem().text()
sql1 = "delete from zd where zdlb = %s "
sqlHelper.execute(sql1, str(delete_item))