图片

接下来。装逼开始....

Update 更新用于修改表中的数据。

语法:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

语法中可以看到,能同时更新多个字段,也能使用WHERE子句并跟随指定条件...

示例1:终端执行sql语句修改数据

更新python的地址信息【更新某一行中的一个列】


root@7c6316b19d80:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 147
Server version: 5.6.51 MySQL Community Server (GPL)

mysql> select * from test_user where name = 'python';
+----+-----------+-------------+--------------+
| id | name      | mobile      | address      |
+----+-----------+-------------+--------------+
|  3 | python    | 18856565858 | Hangzhou     |
+----+-----------+-------------+--------------+
6 rows in set (0.00 sec)

mysql> update test_user set address = 'Hefei' where name = 'python';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test_user where name = 'python';
+----+-----------+-------------+--------------+
| id | name      | mobile      | address      |
+----+-----------+-------------+--------------+
|  3 | python    | 18856565858 | Hefei        |
+----+-----------+-------------+--------------+
6 rows in set (0.00 sec)

mysql>

更新c#的手机号和地址信息【更新某一行中的若干列,记得逗号分割】


mysql> select * from test_user where name = 'c#';
+----+-----------+-------------+--------------+
| id | name      | mobile      | address      |
+----+-----------+-------------+--------------+
|  6 | c#        | 17748484142 | Hangzhou     |
+----+-----------+-------------+--------------+
6 rows in set (0.00 sec)

mysql> update test_user set address = 'Hefei', mobile = '19958585454' where name = 'c#';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test_user where name = 'c#';
+----+-----------+-------------+--------------+
| id | name      | mobile      | address      |
+----+-----------+-------------+--------------+
|  6 | c#        | 19958585454 | Hefei        |
+----+-----------+-------------+--------------+
6 rows in set (0.00 sec)

mysql>

示例2:使用python脚本执行sql语句

更新张三三的地址信息【更新某一行中的一个列】

import pymysql

# 连接数据库
connection = pymysql.connect(host="localhost", user="root", password="123456",
                             database="testing", port=3306, charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection:
        with connection.cursor() as cursor:
            sql = """
                UPDATE test_user
                SET address = '安徽合肥'
                WHERE
                    `name` = '张三三';
            """
            # 执行创建sql语句
            cursor.execute(sql)
            # 提交数据
        connection.commit()

        with connection.cursor() as cursor:
            sql = """
                SELECT
                    *
                FROM
                    test_user
                WHERE
                    `name` = '张三三';
            """
            cursor.execute(sql)
            result = cursor.fetchone()
            print(result)

except pymysql.err.MySQLError as _error:
    raise _error
{'id': 1, 'name': '张三三', 'mobile': '17748484141', 'address': '安徽合肥'}

Process finished with exit code 0

上述代码中可以看到,更新和查询都在一起,当更新和查询数据一致时操作是没问题的,但是如果我只更新数据不查询数据时,虽然不会报错,但是查询的代码还是会执行下,所以代码要优化...

代码区分开了查询和提交,查询中区分开了获取多条数据和单条数据

如果数据类型是要字典格式的,就可以使用下面的通用代码... 当然,如果你是想要别的数据类型,修改下返回数据类型即可...


import pymysql


class MysqlData:
    def __init__(self, host="localhost", user="root", password="123456", database="testing", port=3306):
        # 连接数据库
        self.connection = pymysql.connect(host=host, user=user, password=password, database=database, port=port,
                                          charset='utf8', cursorclass=pymysql.cursors.DictCursor)

    def modify_data(self, sql, args=None):
        """

        Args:
            sql:    sql语句
            args:   接收格式化参数

        Returns:

        """
        try:
            with self.connection:
                with self.connection.cursor() as cursor:
                    # 执行sql语句
                    cursor.execute(sql, args=args)
                # 提交sql语句
                self.connection.commit()
        except pymysql.err.MySQLError as _error:
            raise _error

    def get_data(self, sql, args=None, is_data=False):
        """

        Args:
            sql:        sql语句
            args:       接收格式化参数
            is_data:    判断获取多条数据还是单个数据,默认获取单个数据

        Returns:

        """
        try:
            with self.connection:
                with self.connection.cursor() as cursor:
                    # 执行sql语句
                    cursor.execute(sql, args=args)

                    # 返回查询出的数据信息
                    return cursor.fetchall() if is_data else cursor.fetchone()

        except pymysql.err.MySQLError as _error:
            raise _error
            

if __name__ == '__main__':
    # 初始化类,创建对象
    info = MysqlData()

    # 调用查询方法并打印出来
    print(info.get_data("SELECT * FROM test_user WHERE `name` = 'php'"))

    # 调用更新修改方法:修改php的地址和手机号【更新某一行的若干列,并且逗号分割】
    info.modify_data("UPDATE test_user SET address = '安徽合肥', mobile = '17752525151' WHERE `name` = 'php';")

    # 再次调用查询方法并打印出来
    print(info.get_data("SELECT * FROM test_user WHERE `name` = 'php'"))
{'id': 5, 'name': 'php', 'mobile': '15556565858', 'address': 'Hangzhou'}
{'id': 5, 'name': 'php', 'mobile': '17752525151', 'address': '安徽合肥'}

Process finished with exit code 0

至此,UPDATE更新数据完成...

图片

 

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;感觉还不错记得点赞呦,谢谢!

未完,待续…

一直都在努力,希望您也是!

微信搜索公众号:就用python

更多内容欢迎关注公众号

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐