from sqlalchemy import create_engine
from conf import settings
import pymysql
# mysql设置
HOST = ''
PORT = 3306
USER = ''
PASSWD = ''
DB = 'shzy_map'
CHATSET = 'utf8
class ConnMysqlDB:
"""
连接与操作数据库
con = ConnMysqlDB() #使用前需创建实例
conn = con.connMysql() # 先建立连接
"""
def __init__(self, host=HOST, port=PORT, user=USER,
passwd=PASSWD, db=DB, charset=CHATSET):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.db = db
self.charset = charset
self.conn = None # 数据库连接对象
self.cursor = None # 操作数据库的游标
def connMysql(self):
"""
建立数据库连接
建立游标
:return:返回数据库连接对象,主要用于pandas操作,其他引用无需获取返回值
"""
self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.passwd,
database=self.db, charset=self.charset)
self.cursor = self.conn.cursor()
return self.conn
def closeConn(self):
"""
断开数据库连接,释放游标
:return:
"""
self.cursor.close()
self.conn.close()
def coonEngine(self):
"""
连接数据库,用于pandas
pandas 的数据库储存方式特殊,需要用这个函数连接才能操作
:return:
"""
sql = 'mysql+pymysql://' + self.user + ':' + self.passwd + '@' + self.host + ':' + str(
self.port) + '/' + self.db + '?charset=utf8'
conn = create_engine(sql)
return conn
def queryData(self, sql=''):
"""
查询所有的条数
:param sql: 'select * from tables_name'
:return: 返回多个元组,即返回多条记录(rows),如果没有结果,则返回 ()
"""
self.cursor.execute(sql)
st = self.cursor.fetchall()
return st
def querySomeData(self, sql='', num=100):
"""
查询指定条数
:param sql: 'select * from tables_name'
:param num: 返回的条数
:return: 返回多个元组,即返回num条记录(rows),如果没有结果,则返回 ()
"""
self.cursor.execute(sql)
self.conn.commit()
st = self.cursor.fetchmany(num)
return st
def delect_data(self, table_name):
"""
清除指定表中所有数据,保留格式
:param table_name: 需清除的表名
:return:
"""
sql = "truncate %s" % table_name
self.updateData(sql)
def updateData(self, sql=''):
"""
更新单条语句,做sql的操作
:param sql: sql语句
:return:
"""
self.cursor.execute(sql)
self.conn.commit()
return True
def updateDataBatch(self, sql='', data=()):
"""
批量更新数据,data为tuple
"""
self.cursor.executemany(sql, data)
self.conn.commit()
return True