feapder
feapder copied to clipboard
MysqlDB - feapder-document
https://boris.org.cn/feapder/#/source_code/MysqlDB
feapder是一款支持分布式、批次采集、任务防丢、报警丰富的python爬虫框架
大佬 数据库连接不支持 ssl连接
大佬,to_json 的时候,好像没判断是否结果为空,会导致报错。你查一下,我也不是很确定,具体是:
@auto_retry
def find(self, sql, limit=0, to_json=False):
"""
@summary:
无数据: 返回()
有数据: 若limit == 1 则返回 (data1, data2)
否则返回 ((data1, data2),)
---------
@param sql:
@param limit:
@param to_json 是否将查询结果转为json
---------
@result:
"""
conn, cursor = self.get_connection()
cursor.execute(sql)
if limit == 1:
result = cursor.fetchone() # 全部查出来,截取 不推荐使用
elif limit > 1:
result = cursor.fetchmany(limit) # 全部查出来,截取 不推荐使用
else:
result = cursor.fetchall()
if to_json: # todo 这里下面
columns = [i[0] for i in cursor.description]
# 处理数据
def fix_lob(row):
def convert(col):
if isinstance(col, (datetime.date, datetime.time)):
return str(col)
elif isinstance(col, str) and (
col.startswith("{") or col.startswith("[")
):
try:
# col = self.unescape_string(col)
return json.loads(col)
except:
return col
else:
# col = self.unescape_string(col)
return col
return [convert(c) for c in row]
result = [fix_lob(row) for row in result] # todo 这里 result 如果为None,会报错吧
result = [dict(zip(columns, r)) for r in result]
self.close_connection(conn, cursor)
return result
æ¥çæå®çMySQLæ°æ®åºä¸æåªäºæ°æ®è¡¨ï¼
from feapder.db.mysqldb import MysqlDB
db = MysqlDB.from_url("mysql://username:password@ip:port/db?charset=utf8mb4")
# æ¥è¯¢æå®æ°æ®åºä¸çæææ°æ®è¡¨
tables = [tb[0] for tb in db.find("show tables;")]