feapder icon indicating copy to clipboard operation
feapder copied to clipboard

MysqlDB - feapder-document

Open Boris-code opened this issue 3 years ago • 3 comments

https://boris.org.cn/feapder/#/source_code/MysqlDB

feapder是一款支持分布式、批次采集、任务防丢、报警丰富的python爬虫框架

Boris-code avatar Mar 15 '21 12:03 Boris-code

大佬 数据库连接不支持 ssl连接

Lu-dashuai avatar May 20 '21 09:05 Lu-dashuai

大佬,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

qqizai avatar Nov 16 '21 08:11 qqizai

查看指定的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;")]

suyin-long avatar Oct 17 '22 07:10 suyin-long