python操作pymysql总结
2019-08-19 本文已影响0人
饮冰十年_难凉热血
1. 链接数据库
class Mysql:
def __init__(self, **kwargs):
self.kwargs = kwargs or cf.MYSQL_LOCAL_IP
self.db = pymysql.connect(
host=self.kwargs['HOST'],
port=self.kwargs['PORT'],
user=self.kwargs['USER'],
password=self.kwargs['PASSWORD'],
database=self.kwargs['DATABASE'],
)
self.cursor = self.db.cursor()
db
和 cursor
是需要用到的两个实例, 对 cursor
的操作有执行 sql 语句 execute()
, 得到数据 fetch()
和 fetchall()
, fetch()
只返回一条数据, fetchall()
返回所有数据, 返回的格式均是 tuple
类型, 如: ((data1), (data2))
, db
的操作目前我用到的有获取 cursor
和 关闭数据库链接 db.close()
.
2. 执行单条 sql 语句
self.cursor.execute('SELECT * From `account`')
data = self.cursor.fetchall() # ((name, pwd, index),(name, pwd, index))
3. 执行多条 sql 语句并执行事务
rows = ((1, 2, 3), (2, 3, 4))
sql_insert = '''INSERT INTO info (key_id, apply_id, update_time)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE
update_time=values(update_time);'''
try:
mysql.cursor.executemany(sql, rows)
except Exception as e:
print(e)
mysql.db.rollback()
else:
mysql.db.commit()
rows
应该是 list
或者 tuple
, ON DUPLICATE KEY UPDATE
表示如果存在这条数据(通过唯一索引判断是否重复)则更新 update_time
.
4. IN 语句的使用
sql = '''SELECT * From company
WHERE company_id IN (%s);''' % ','.join(['%s'] * len(company_id_))
mysql.cursor.execute(sql, company_id_)
results = mysql.cursor.fetchall()
我试了好久才发现要这么写 IN
语句, 虽然 mysql
里面的 IN
语句挺简单的.