iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >如何让MySQL数据库操作更方便
  • 330
分享到

如何让MySQL数据库操作更方便

2023-06-02 06:06:13 330人浏览 安东尼
摘要

这篇文章主要介绍了如何让MySQL数据库操作更方便,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的对Mysql的操作的模块最好的两个模块是: mysqldb这是一

这篇文章主要介绍了如何让MySQL数据库操作更方便,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

python的对Mysql的操作的模块最好的两个模块是:

mysqldb
这是一个老牌的Mysql模块,它封装了MySQL客户端的C语言api,但是它主要支持Python 2.x的版本,后来有人叉了一个版本加入了Python 3的支持,并起名为mysqlclient -python它的pypi包名为mysqlclient,所以通过pip安装就是pip install mysqlclient

PyMySQL
这是一个纯Python实现的MySQL客户端。因为是纯Python实现,它和Python 3的异步模块aysncio可以很好的结合起来,形成了aiomysql模块,后面我们写异步爬虫时就可以对数据库进行异步操作了。

通过以上简单的对比,我们选择了PyMySQL来作为我们的数据库客户端模块。

我在Python中操作MySQL的时间已经有很年了,总结下来,还是龙卷风里面的那个torndb的封装使用比较方便.torndb在Python 2.x时代早就出现了,那时候它是对MySQLdb的封装。后来接触Python 3和PyMySQL,就自己参考torndb和自己的经验,对PyMySQL进行了一个封装,并给它起了个很土的名字:ezpymysql

不过,这个很土的名字背后,还是有着让人省心的方便,希望小猿们能看在它好用的份儿上,别计较它很土的名字。

废话不多讲,代码接着上!

1.使用示例

首先我们先通过一个使用例子看看它的方便性:

from ezpymysql import Connectiondb = Connection(    'localhost',    'db_name',    'user',    'passWord')# 获取一条记录sql = 'select * from test_table where id=%s'data = db.get(sql, 2)# 获取多天记录sql = 'select * from test_table where id>%s'data = db.query(sql, 2)# 插入一条数据sql = 'insert into test_table(title, url) values(%s, %s)'last_id = db.execute(sql, 'test', 'Http://a.com/')# 或者last_id = db.insert(sql, 'test', 'http://a.com/')# 使用更高级的方法插入一条数据item = {    'title': 'test',    'url': 'http://a.com/',}last_id = db.table_insert('test_table', item)

它的使用分两步:
首先,建立一个MySQL连接;
然后,通过sql语句查询或插入数据。

SQLAchemy之类的ORM呢?简单说,就是因为这个简单,我们的操作基本上都是查询和插入,用基本的选择,插入这些sql语句是最方便和简单的。而ORM要先对表建立映射模型,查询方法也是因ORM而不同,过度的封装很不适合爬虫应用场景。其实,老猿我在写网络应用时,仍然是自己写SQL,感觉就是那么的清爽!

好吧,不再卖关子了,该上ezpymysql的实现了。

2.具体实现

#File: ezpymysql.py#Author: veelion"""A lightweight wrapper around PyMySQL.only for python3"""import timeimport loggingimport tracebackimport pymysql.cursorsversion = "0.7"version_info = (0, 7, 0, 0)class Connection(object):    """A lightweight wrapper around PyMySQL.    """    def __init__(self, host, database, user=None, password=None,                 port=0,                 max_idle_time=7 * 3600, connect_timeout=10,                 time_zone="+0:00", charset = "utf8mb4", sql_mode="TRADITIONAL"):        self.host = host        self.database = database        self.max_idle_time = float(max_idle_time)        args = dict(use_unicode=True, charset=charset,                    database=database,                    init_command=('SET time_zone = "%s"' % time_zone),                    cursorclass=pymysql.cursors.DictCursor,                    connect_timeout=connect_timeout, sql_mode=sql_mode)        if user is not None:            args["user"] = user        if password is not None:            args["passwd"] = password        # We accept a path to a MySQL Socket file or a host(:port) string        if "/" in host:            args["unix_socket"] = host        else:            self.socket = None            pair = host.split(":")            if len(pair) == 2:                args["host"] = pair[0]                args["port"] = int(pair[1])            else:                args["host"] = host                args["port"] = 3306        if port:            args['port'] = port        self._db = None        self._db_args = args        self._last_use_time = time.time()        try:            self.reconnect()        except Exception:            logging.error("Cannot connect to MySQL on %s", self.host,                          exc_info=True)    def _ensure_connected(self):        # Mysql by default closes client connections that are idle for        # 8 hours, but the client library does not report this fact until        # you try to perform a query and it fails.  Protect against this        # case by preemptively closing and reopening the connection        # if it has been idle for too long (7 hours by default).        if (self._db is None or            (time.time() - self._last_use_time > self.max_idle_time)):            self.reconnect()        self._last_use_time = time.time()    def _cursor(self):        self._ensure_connected()        return self._db.cursor()    def __del__(self):        self.close()    def close(self):        """Closes this database connection."""        if getattr(self, "_db", None) is not None:            self._db.close()            self._db = None    def reconnect(self):        """Closes the existing database connection and re-opens it."""        self.close()        self._db = pymysql.connect(**self._db_args)        self._db.autocommit(True)    def query(self, query, *parameters, **kwparameters):        """Returns a row list for the given query and parameters."""        cursor = self._cursor()        try:            cursor.execute(query, kwparameters or parameters)            result = cursor.fetchall()            return result        finally:            cursor.close()    def get(self, query, *parameters, **kwparameters):        """Returns the (singular) row returned by the given query.        """        cursor = self._cursor()        try:            cursor.execute(query, kwparameters or parameters)            return cursor.fetchone()        finally:            cursor.close()    def execute(self, query, *parameters, **kwparameters):        """Executes the given query, returning the lastrowid from the query."""        cursor = self._cursor()        try:            cursor.execute(query, kwparameters or parameters)            return cursor.lastrowid        except Exception as e:            if e.args[0] == 1062:                pass            else:                traceback.print_exc()                raise e        finally:            cursor.close()    insert = execute    ## =============== high level method for table ===================    def table_has(self, table_name, field, value):        if isinstance(value, str):            value = value.encode('utf8')        sql = 'SELECT %s FROM %s WHERE %s="%s"' % (            field,            table_name,            field,            value)        d = self.get(sql)        return d    def table_insert(self, table_name, item):        '''item is a dict : key is mysql table field'''        fields = list(item.keys())        values = list(item.values())        fieldstr = ','.join(fields)        valstr = ','.join(['%s'] * len(item))        for i in range(len(values)):            if isinstance(values[i], str):                values[i] = values[i].encode('utf8')        sql = 'INSERT INTO %s (%s) VALUES(%s)' % (table_name, fieldstr, valstr)        try:            last_id = self.execute(sql, *values)            return last_id        except Exception as e:            if e.args[0] == 1062:                # just skip duplicated item                pass            else:                traceback.print_exc()                print('sql:', sql)                print('item:')                for i in range(len(fields)):                    vs = str(values[i])                    if len(vs) > 300:                        print(fields[i], ' : ', len(vs), type(values[i]))                    else:                        print(fields[i], ' : ', vs, type(values[i]))                raise e    def table_update(self, table_name, updates,                     field_where, value_where):        '''updates is a dict of {field_update:value_update}'''        upsets = []        values = []        for k, v in updates.items():            s = '%s=%%s' % k            upsets.append(s)            values.append(v)        upsets = ','.join(upsets)        sql = 'UPDATE %s SET %s WHERE %s="%s"' % (            table_name,            upsets,            field_where, value_where,        )        self.execute(sql, *(values))

3.使用方法

这个实现是对pymysql的简单封装,但提供了一些方便的操作:

建立MySQL连接

db = Connection(    'localhost',    'db_name',    'user',    'password')

一般只需要四个参数就可以建立连接了:

  • 主持人:数据库地址,本节就是本地主机

  • database:数据库名

  • user:数据库用户名

  • 密码:数据库用户的密码

后面还有几个参数可酌情使用:

  • max_idle_time:MySQL服务器默认8小时闲置就会断开客户端的连接;这个参数告诉客户端闲置多长时间要重新连接;

  • time_zone:这里默认时区为0区,你可以设置为自己的时区,比如东8区+8:00;

  • 字符集:默认为utf8mb4,即支持门司字符的UTF8;

操作数据库

数据库操作分为两类:读和写。
读操作:使用get()获取一个数据,返回的是一个dict,key就是数据库表的字段;使用query()来获取一组数据,返回的是一个列表,其中每个项目是一个dict,跟get()返回的字典一样。
写操作:使用insert()或execute(),看源码就知道,inseret就是执的别名。

高级操作

以table_开头的方法:

  • table_has()查询某个值是否存在于表中。查询的字段最好建立的在MySQL中建立了索引,不然数据量稍大就会很慢。

  • table_insert()把一个字典类型的数据插入表中。字典的key必须是表的字段。

  • table_update()更新表中的一条记录。其中,field_where最好是建立了索引,不然数据量稍大就会很慢。

感谢你能够认真阅读完这篇文章,希望小编分享的“如何让MySQL数据库操作更方便”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: 如何让MySQL数据库操作更方便

本文链接: https://www.lsjlt.com/news/229159.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何让MySQL数据库操作更方便
    这篇文章主要介绍了如何让MySQL数据库操作更方便,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Python的对MySQL的操作的模块最好的两个模块是: MySQLdb这是一...
    99+
    2023-06-02
  • Python数据库操作的独门秘籍:让你的数据库操作更出彩
    在Python开发中,数据库操作是不可避免的。如何高效、稳定地进行数据库操作,是每个Python开发工程师需要掌握的技能。本文将分享一些Python数据库操作的独门秘籍,帮助你提高数据库操作的性能和效率,让你的数据库操作更加出彩。 1....
    99+
    2024-02-07
    Python 数据库 多线程 缓存 数据库启动参数
  • Python如何操作MySql数据库
    本篇文章为大家展示了Python如何操作MySql数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、关于Python操作数据库的概述Python所有的数据库接口程序都在一定程度上遵守 Pyth...
    99+
    2023-06-15
  • node如何操作mysql数据库
    这篇文章主要介绍了node如何操作mysql数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:1、建立数据库连接:createC...
    99+
    2024-04-02
  • DML (数据操作语言):数据库操作的利器,让数据管理更轻松
    DML(数据操作语言)是数据库领域中一种重要的语言,它允许用户与数据库进行交互,对数据库中的数据进行各种操作。DML语句可以用来新增、删除、更新和检索数据,是数据库的基本操作语言之一。在本文中,我们将详细介绍DML语言及其在数据库中的应...
    99+
    2024-02-12
    数据操作语言, 数据库, 数据管理, 增删改查, SQL
  • VB.NET中如何操作MySql数据库
    这期内容当中小编将会给大家带来有关VB.NET中如何操作MySql数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。VB.NET操作MySql数据库的一个例子对DataSet进行操作Public&nbs...
    99+
    2023-06-17
  • .Net中如何操作MySql数据库
    今天就跟大家聊聊有关.Net中如何操作MySql数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  在使用这个类库之前,你必须安装   ODBC...
    99+
    2024-04-02
  • Python中MySQL数据库如何操作
    今天就跟大家聊聊有关Python中MySQL数据库如何操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  Python标准数据库接口为Python...
    99+
    2024-04-02
  • Python实现MySQL更新操作,让你的数据库与程序同步更新
    MySQL是一款广泛使用的关系型数据库管理系统,而Python是一种简单易学、高效的编程语言。两者结合起来可以实现更加强大的数据处理能力。本文将介绍如何在Python中使用MySQL Connector / Python模块来实现MySQL...
    99+
    2023-09-07
    数据库 python mysql
  • 【MySQL】数据库——库操作
    文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码...
    99+
    2023-10-20
    数据库 mysql
  • 如何使用SQL操作MySQL数据库
    本篇内容主要讲解“如何使用SQL操作MySQL数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用SQL操作MySQL数据库”吧!从本节开始正式介绍各种...
    99+
    2024-04-02
  • pymysql操作mysql数据库的方法
    目录前言1、pymysql.connent2、conn.cursor()3、cursor.execute()4、cursor.executemany()5、cursor.fetchone()6、cursor.scroll...
    99+
    2023-04-19
    pymysql操作mysql数据库 pymysql操作mysql
  • mysql client如何操作MySQL关系型数据库
    这篇文章主要介绍了mysql client如何操作MySQL关系型数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主要讲解mysqlclient操作MySQL关系型数据库...
    99+
    2023-06-02
  • Python——操作MySQL数据库
    😊Python——操作MySQL数据库 🚀前言🔍数据库编程🍭数据库编程基本介绍🍭数据库编程接口🍭...
    99+
    2023-09-15
    数据库 python mysql
  • PHP操作MySQL数据库
    PHP操作MySQL数据库的步骤如下:1. 连接数据库:使用`mysqli_connect()`函数或者`PDO`类来建立与MySQ...
    99+
    2023-09-05
    php
  • Python3 操作Mysql数据库
    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,而Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQ...
    99+
    2023-01-31
    操作 数据库 Mysql
  • 【MySQL】数据库的操作
    目录 前言 创建数据库 编码集和校验集 不同校验集的区别 删除数据库 确认当前数据库 查看数据库属性 修改数据库属性 备份与还原 数据库和表的备份 还原 创建表 查看列结构 查看表属性 修改表的列 修改表名称  修改列名称 删除表 前言...
    99+
    2023-09-14
    数据库 mysql
  • nodejs操作MySQL数据库
    1、操作数据库的步骤 安装操作 MySQL 数据库的第三方模块(mysql)通过 mysql 模块连接到 MySQL 数据库通过 mysql 模块执行 SQL 语句   2、安装与配置 mysql 模块 2.1、安装 mysql 模块 m...
    99+
    2023-10-06
    数据库 javascript node.js mysql 前端
  • 【MySQL】数据库——表操作
    文章目录 1. 创建表2. 查看表3. 修改表修改表名add ——增加modify——修改drop——删除修改列名称 4. 删除表 1. 创建表 语法: create table ...
    99+
    2023-10-26
    数据库 mysql
  • mysql-数据库的操作
    系统数据库执行如下命令,查看系统所有的数据库mysql> show databases;+--------------------+| Database           |+---...
    99+
    2023-01-30
    操作 数据库 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作