Python - MySQL连接简单封装

目前公司用Storm或者直接从Kafka里面读数据进行实时处理而小数据量的写个shell脚本就能搞定,但涉及到跨库查询shell处理比较麻烦,因此简单封装了一下MySQL官方的Python-Connector,使用Pyton重写一遍逻辑。封装的类请看我的GitHub

以下是说明文档:

mysql_connect.py对应的是mysql.connector
mysql_python.py对应的是MySQLdb,这个我直接从nestordeharo fork过来的。

使用

你需要import类并初始化host,user,password,database四个参数来开始使用

1
2
3
from mysql_connect import MysqlConnect

connect_mysql = MysqlPython('host.ip.address', 'user', 'password', 'database')

Select语句带一个条件

如果你查询语句只涉及一个表和一个条件,那你可以使用select函数,args参数写你要获取的列名。

1
2
3
conditional_query = 'car_make = %s '

result = connect_mysql.select('car', conditional_query, 'id_car', 'car_text', car_make='nissan')

返回结果: 函数返回一个列表,若未获取到数据则返回空列表

Select语句带多个条件(mysql_python.py)

如果你的where条件超过一个,请使用select_advanced函数,args参数会转为tuple

1
2
3
sql_query = 'SELECT C.cylinder FROM car C WHERE C.car_make = %s AND C.car_model = %s'

result = connect_mysql.select_advanced(sql_query, ('car_make', 'nissan'),('car_model','altima'))

_注意:在sql_advanced函数中tuple要按顺序传_

返回结果: 函数返回一个列表,若未获取到数据则返回空列表

复杂Select语句(mysql_connect.py)

复杂语句就直接用这个吧。

1
2
3
4
5
6
7
query = ("SELECT first_name, last_name, hire_date FROM employees "
"WHERE hire_date BETWEEN %s AND %s")

hire_start = datetime.date(1999, 1, 1)
hire_end = datetime.date(1999, 12, 31)

result = connect_mysql.select_advanced(query, (hire_start, hire_end))

返回结果: 函数返回一个列表,若未获取到数据则返回空列表

插入数据

插入数据非常简单,指定列名和值即可

1
result = connect_msyql.insert('car', car_make='ford', car_model='escort', car_year='2005')

返回结果: 该函数返回最后一个插入数据的row id

批量插入(mysql_connect.py)

批量插入数据,mysql.connect会自动拼接语句

1
2
3
4
5
6
7
data = [
('Jane', date(2005, 2, 12)),
('Joe', date(2006, 5, 23)),
('John', date(2010, 10, 3)),
]
stmt = "INSERT INTO employees (first_name, hire_date) VALUES (%s, %s)"
connect_mysql.insert_bulk(stmt, data)

更新数据

要更新数据,指定表名,条件和字段就可以了。

1
2
3
conditional_query = 'car_make = %s'

result = connect_mysql.update('car_table', conditional_query, 'nissan', car_model='escort', car_year='2005')

返回结果: 该函数返回被修改的数量

复杂更新数据(mysql_connect.py)

复杂语句就直接用这个吧。

1
2
3
4
5
6
7
stmt = '''
update bussiness_table
set businesstype=20
where id in (''' + ','.join(id_list) + ''')
'''

result = connect_mysql.update_advanced(stmt)

返回结果: 该函数返回被修改的数量

删除数据

删除数据很简单,表名,字段名和条件即可

1
2
3
conditional_query = 'car_make = %s'

result = connect_mysql.delete('car', conditional_query, 'nissan')

返回结果: 返回删除的行数

依赖

MySQL-python >= 1.2.5 或 mysql-connector >= 2.1.6

打赏支持:如果你觉得我的文章对你有所帮助,可以打赏我哟。