⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursors.py

📁 python联接mysql驱动 python联接mysql驱动
💻 PY
📖 第 1 页 / 共 2 页
字号:
        from types import UnicodeType        db = self._get_db()        charset = db.character_set_name()        for index, arg in enumerate(args):            q = "SET @_%s_%d=%s" % (procname, index,                                         db.literal(arg))            if isinstance(q, unicode):                q = q.encode(charset)            self._query(q)            self.nextset()                    q = "CALL %s(%s)" % (procname,                             ','.join(['@_%s_%d' % (procname, i)                                       for i in range(len(args))]))        if type(q) is UnicodeType:            q = q.encode(charset)        self._query(q)        self._executed = q        if not self._defer_warnings: self._warning_check()        return args        def _do_query(self, q):        db = self._get_db()        self._last_executed = q        db.query(q)        self._do_get_result()        return self.rowcount    def _query(self, q): return self._do_query(q)        def _fetch_row(self, size=1):        if not self._result:            return ()        return self._result.fetch_row(size, self._fetch_type)    def __iter__(self):        return iter(self.fetchone, None)    Warning = Warning    Error = Error    InterfaceError = InterfaceError    DatabaseError = DatabaseError    DataError = DataError    OperationalError = OperationalError    IntegrityError = IntegrityError    InternalError = InternalError    ProgrammingError = ProgrammingError    NotSupportedError = NotSupportedError   class CursorStoreResultMixIn(object):    """This is a MixIn class which causes the entire result set to be    stored on the client side, i.e. it uses mysql_store_result(). If the    result set can be very large, consider adding a LIMIT clause to your    query, or using CursorUseResultMixIn instead."""    def _get_result(self): return self._get_db().store_result()    def _query(self, q):        rowcount = self._do_query(q)        self._post_get_result()        return rowcount    def _post_get_result(self):        self._rows = self._fetch_row(0)        self._result = None    def fetchone(self):        """Fetches a single row from the cursor. None indicates that        no more rows are available."""        self._check_executed()        if self.rownumber >= len(self._rows): return None        result = self._rows[self.rownumber]        self.rownumber = self.rownumber+1        return result    def fetchmany(self, size=None):        """Fetch up to size rows from the cursor. Result set may be smaller        than size. If size is not defined, cursor.arraysize is used."""        self._check_executed()        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):        """Fetchs all available rows from the cursor."""        self._check_executed()        if self.rownumber:            result = self._rows[self.rownumber:]        else:            result = self._rows        self.rownumber = len(self._rows)        return result        def scroll(self, value, mode='relative'):        """Scroll the cursor in the result set to a new position according        to mode.                If mode is 'relative' (default), value is taken as offset to        the current position in the result set, if set to 'absolute',        value states an absolute target position."""        self._check_executed()        if mode == 'relative':            r = self.rownumber + value        elif mode == 'absolute':            r = value        else:            self.errorhandler(self, ProgrammingError,                              "unknown scroll mode %s" % `mode`)        if r < 0 or r >= len(self._rows):            self.errorhandler(self, IndexError, "out of range")        self.rownumber = r    def __iter__(self):        self._check_executed()        result = self.rownumber and self._rows[self.rownumber:] or self._rows        return iter(result)    class CursorUseResultMixIn(object):    """This is a MixIn class which causes the result set to be stored    in the server and sent row-by-row to client side, i.e. it uses    mysql_use_result(). You MUST retrieve the entire result set and    close() the cursor before additional queries can be peformed on    the connection."""    _defer_warnings = True        def _get_result(self): return self._get_db().use_result()    def fetchone(self):        """Fetches a single row from the cursor."""        self._check_executed()        r = self._fetch_row(1)        if not r:            self._warning_check()            return None        self.rownumber = self.rownumber + 1        return r[0]                 def fetchmany(self, size=None):        """Fetch up to size rows from the cursor. Result set may be smaller        than size. If size is not defined, cursor.arraysize is used."""        self._check_executed()        r = self._fetch_row(size or self.arraysize)        self.rownumber = self.rownumber + len(r)        if not r:            self._warning_check()        return r             def fetchall(self):        """Fetchs all available rows from the cursor."""        self._check_executed()        r = self._fetch_row(0)        self.rownumber = self.rownumber + len(r)        self._warning_check()        return r    def __iter__(self):        return self    def next(self):        row = self.fetchone()        if row is None:            raise StopIteration        return row    class CursorTupleRowsMixIn(object):    """This is a MixIn class that causes all rows to be returned as tuples,    which is the standard form required by DB API."""    _fetch_type = 0class CursorDictRowsMixIn(object):    """This is a MixIn class that causes all rows to be returned as    dictionaries. This is a non-standard feature."""    _fetch_type = 1    def fetchoneDict(self):        """Fetch a single row as a dictionary. Deprecated:        Use fetchone() instead. Will be removed in 1.3."""        from warnings import warn        warn("fetchoneDict() is non-standard and will be removed in 1.3",             DeprecationWarning, 2)        return self.fetchone()    def fetchmanyDict(self, size=None):        """Fetch several rows as a list of dictionaries. Deprecated:        Use fetchmany() instead. Will be removed in 1.3."""        from warnings import warn        warn("fetchmanyDict() is non-standard and will be removed in 1.3",             DeprecationWarning, 2)        return self.fetchmany(size)    def fetchallDict(self):        """Fetch all available rows as a list of dictionaries. Deprecated:        Use fetchall() instead. Will be removed in 1.3."""        from warnings import warn        warn("fetchallDict() is non-standard and will be removed in 1.3",             DeprecationWarning, 2)        return self.fetchall()class CursorOldDictRowsMixIn(CursorDictRowsMixIn):    """This is a MixIn class that returns rows as dictionaries with    the same key convention as the old Mysqldb (MySQLmodule). Don't    use this."""    _fetch_type = 2class Cursor(CursorStoreResultMixIn, CursorTupleRowsMixIn,             BaseCursor):    """This is the standard Cursor class that returns rows as tuples    and stores the result set in the client."""class DictCursor(CursorStoreResultMixIn, CursorDictRowsMixIn,                 BaseCursor):     """This is a Cursor class that returns rows as dictionaries and    stores the result set in the client."""   class SSCursor(CursorUseResultMixIn, CursorTupleRowsMixIn,               BaseCursor):    """This is a Cursor class that returns rows as tuples and stores    the result set in the server."""class SSDictCursor(CursorUseResultMixIn, CursorDictRowsMixIn,                   BaseCursor):    """This is a Cursor class that returns rows as dictionaries and    stores the result set in the server."""

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -