pythondefexecute(self,operation,parameters=none,async=false):的简单介绍

发布时间:2022-11-24

本文目录一览:

  1. python fetchone 取出的数据是什么类型
  2. python 的函数前面带个杠是什么意思?例如def _ExecuteCmd(self, cmd)
  3. python async=False错误如何修改
  4. SyntaxError:invalid syntax,def write(self,date,async=False):,srcapy爬虫框架

python fetchone 取出的数据是什么类型

举例,首先看了pymysql里面的cursor类,关于execute、fetchone和fetchall定义如下:

# 调用self._query方法进行查询
def execute(self, query, args=None):
    """
    Execute a query
    :param str query: Query to execute.
    :param args: parameters used with query. (optional)
    :type args: tuple, list or dict
    :return: Number of affected rows
    :rtype: int
    If args is a list or tuple, %s can be used as a placeholder in the query.
    If args is a dict, %(name)s can be used as a placeholder in the query.
    """
    while self.nextset():
        pass
    query = self.mogrify(query, args)
    result = self._query(query)
    self._executed = query
    return result
# 调用_do_get_result获取查询结果
def _query(self, q):
    conn = self._get_db()
    self._last_executed = q
    self._clear_result()
    conn.query(q)
    self._do_get_result()
    return self.rowcount
# 这里获取结果
def _do_get_result(self):
    conn = self._get_db()
    self._result = result = conn._result
    self.rowcount = result.affected_rows
    self.description = result.description
    self.lastrowid = result.insert_id
    self._rows = result.rows
    self._warnings_handled = False
    if not self._defer_warnings:
        self._show_warnings()
# fetchone方法
def fetchone(self):
    """
    Fetch the next row
    """
    self._check_executed()
    if self._rows is None or self.rownumber == len(self._rows):
        return None
    result = self._rows[self.rownumber]
    self.rownumber += 1
    return result
def fetchmany(self, size=None):
    """
    Fetch several rows
    """
    self._check_executed()
    if self._rows is None:
        return ()
    end = self.rownumber + (size or self.arraysize)
    result = self._rows[self.rownumber:end]
    self.rownumber = min(end, len(self._rows))
    return result
def fetchall(self):
    """
    Fetch all the rows
    """
    self._check_executed()
    if self._rows is None:
        return ()
    if self.rownumber:
        result = self._rows[self.rownumber:]
    else:
        result = self._rows
    self.rownumber = len(self._rows)
    return result

口说无凭,我们直接通过Wireshark抓包来证明一下,首先我在本地执行脚本如下,然后我监听本地的网卡流量:

import pymysql
conn = pymysql.connect(host='xxx', port=3306, user='xucl', password='xuclxucl', database='xucl')
cursor = conn.cursor()
cursor.execute("select * from t")

注意,我这里并没有执行fetch操作,如果监听到的包里面包含了结果,那么就证明我们前面的分析是正确的,话不多说开始实验,Wireshark抓包如下: 果然跟我们之前的预测是一致的,即使没有进行fetch操作,MySQL也将结果集发送到客户端了。另外关于结果集发送,可以参考我另外一篇文章:《由一个抓瞎的SQL引申出去》 结论:

  • 客户端执行SQL的时候,MySQL一次性将结果集发送给了客户端
  • 客户端接收到结果集以后存储本地内存变量中
  • fetch结果只是从这个本地变量中获取,fetchone/fetchmany/fetchall只是获取行为的不同,因此对于MySQL来说并没有什么不同。

python 的函数前面带个杠是什么意思?例如def _ExecuteCmd(self, cmd)

上面这个例子就是说在一个类中,只有__a这个函数是内部函数,其他都可以在外部调用,在Python中至少大家习惯的写法而已,无实际作用

python async=False错误如何修改

你使用的是Python3,而async是Python3中加入的关键字,关键字是不可以作为变量名的。所以抛出了一个语法错误(SyntaxError)。 这种情况常见做法是加一个下划线,如:

async_ = False

这样它就是一个普通的变量名而不是关键字了。 或者给这个变量换个名字。 PS: 实际上加下划线也就是换名字。

SyntaxError:invalid syntax,def write(self,date,async=False):,srcapy爬虫框架

invalid syntax 是无效的标示符,说明你的函数或者变量定义出错,你查一下就知道,你的函数名写错了。

a1 = triangle(3, 8) 改为 a1 = triangle_area(3, 8)