python:mysql插入和查询数据

本文介绍了如何使用Python进行MySQL数据的插入和查询。通过示例展示了命令行插入数据、Python脚本插入数据的方式,以及如何解决查询时的编码问题。同时,详细解释了SQL查询语法,并给出了通过SQL命令和Python脚本查询数据的例子,包括使用fetchall、fetchone和fetchmany方法。最后,提到了WHERE条件和LIMIT限制在查询中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片

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

mysql插入数据

语法:


INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

INSERT INTO test_user (NAME, mobile, address)
VALUES
  (
    '张三三',
    18847474549,
    '浙江杭州'
  )

以values分割,上面的括号里面是数据库中的字段名称;下面括号的字段是对相应字段的值

示例1:通过命令行插入数据


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

mysql> sue testing;
Database changed

mysql> insert into test_user(name, mobile, address) values ('python', 18856565858, 'Hangzhou');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test_user(name, mobile, address) values ('java', 17756565858, 'Hangzhou');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test_user(name, mobile, address) values ('php', 15556565858, 'Hangzhou');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test_user(name, mobile, address) 
    -> values
    -> ('c#', 17748484142, 'Hangzhou');
Query OK, 1 row affected (0.00 sec)

注意点:

往数据库中插入了四条数据,均没添加id字段,是因为id设置了自增属性(AUTO_INCREMENT)

“ - > ” 是换行操作,sql语句很长时回车换行输入,切记回车别加分号,不然就直接执行了...

示例2:使用python脚本插入数据


import pymysql

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

try:
    # 创建游标
    cur = conn.cursor()
    sql = """
        INSERT INTO test_user (NAME, mobile, address)
        VALUES
            (
                '张三三',
                18847474549,
                '浙江杭州'
            )
    """
    # 执行创建sql语句
    cur.execute(sql)
    # 提交数据
    conn.commit()

    # 关闭游标
    cur.close()
    # 关闭数据库连接
    conn.close()
except pymysql.err.MySQLError as _error:
    raise _error

查询数据是否添加完成

图片

终端查询的时候,发现汉字全部显示成了问号,其实是因为有些编码依旧不是utf8导致的

解决办法如下:

执行下面的命令,如果不能确定是哪个导致的,就全部执行完......

set character_set_client = utf8;

set character_set_server = utf8;

set character_set_connection = utf8;

set character_set_database = utf8;

set character_set_results = utf8;

set collation_connection = utf8_general_ci;

set collation_database = utf8_general_ci;

set collation_server = utf8_general_ci;


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

mysql> set character_set_client = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_connection = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_database = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_results = utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set collation_connection = utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)

mysql> set collation_database = utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)

mysql> set collation_server = utf8_general_ci;
Query OK, 0 rows affected (0.00 sec)

mysql> use testing;
Database changed

mysql> select * from test_user;
+----+-----------+-------------+--------------+
| id | name      | mobile      | address      |
+----+-----------+-------------+--------------+
|  1 | 张三三 | 17748484141 | 浙江杭州 |
|  3 | python    | 18856565858 | Hangzhou     |
|  4 | java      | 17756565858 | Hangzhou     |
|  5 | php       | 15556565858 | Hangzhou     |
|  6 | c#        | 17748484142 | Hangzhou     |
|  9 | 111       | 18847474549 | 浙江杭州 |
+----+-----------+-------------+--------------+
6 rows in set (0.00 sec)

mysql查询数据

语法:


SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N]
  • SELECT 是查询的关键字

  • column_name,column_name 是指纵列的属性名称,或者直接*号(查询所有)

  • FROM 后面跟表名,指定查询哪个表

  • WHERE 后增加条件,例如:id=1或name='xxxx'等

  • LIMIT 就理解是条数,例如:LIMIT 1 就是获取一条数据

示例3:通过执行sql命令获取数据


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

mysql> use testing;
Database changed

mysql> select * from test_user;
+----+-----------+-------------+--------------+
| id | name      | mobile      | address      |
+----+-----------+-------------+--------------+
|  1 | 张三三 | 17748484141 | 浙江杭州 |
|  3 | python    | 18856565858 | Hangzhou     |
|  4 | java      | 17756565858 | Hangzhou     |
|  5 | php       | 15556565858 | Hangzhou     |
|  6 | c#        | 17748484142 | Hangzhou     |
|  9 | 111       | 18847474549 | 浙江杭州 |
+----+-----------+-------------+--------------+
6 rows in set (0.00 sec)

示例4:使用python脚本获取数据


import pymysql

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

try:
    with connection:
        with connection.cursor() as cursor:
            sql = """
                SELECT
                    *
                FROM
                    test_user
            """
            cursor.execute(sql)
            result = cursor.fetchall()
            for i in result:
                print(i)

except pymysql.err.MySQLError as _error:
    raise _error

{'id': 1, 'name': '张三三', 'mobile': '17748484141', 'address': '浙江杭州'}
{'id': 3, 'name': 'python', 'mobile': '18856565858', 'address': 'Hangzhou'}
{'id': 4, 'name': 'java', 'mobile': '17756565858', 'address': 'Hangzhou'}
{'id': 5, 'name': 'php', 'mobile': '15556565858', 'address': 'Hangzhou'}
{'id': 6, 'name': 'c#', 'mobile': '17748484142', 'address': 'Hangzhou'}
{'id': 9, 'name': '111', 'mobile': '18847474549', 'address': '浙江杭州'}

Process finished with exit code 0

上述代码中可以明显看到,没有close操作了,而使用了with,with是python中的关键字,也叫上下文管理,通俗理解就是代码执行完毕后会自动执行清理工作,这里的清理指的就是自动关闭游标和连接操作......

注意三个获取数据的方法:

fetchall 获取多个数据,返回一个列表

result = cursor.fetchall()
for i in result:
    print(i)

fetchone 获取单个数据,返回第一行数据

result = cursor.fetchone()
print(result)

fetchmany 是根据size的值来获取对应数量数据,无论多少条均返回列表类型

result = cursor.fetchmany(size=2)
print(result)

WHERE 条件查询

with connection.cursor() as cursor:
    sql = """
        SELECT
            *
        FROM
            test_user
        WHERE
            id = 9
    """
    cursor.execute(sql)
    result = cursor.fetchone ()
    print(result)

{'id': 9, 'name': '111', 'mobile': '18847474549', 'address': '浙江杭州'}

Process finished with exit code 0

LIMIT 条数获取

with connection.cursor() as cursor:
    sql = """
        SELECT
            *
        FROM
            test_user
        LIMIT 2
    """
    cursor.execute(sql)
    result = cursor.fetchall()
    for i in result:
        print(i)
{'id': 1, 'name': '张三三', 'mobile': '17748484141', 'address': '浙江杭州'}
{'id': 3, 'name': 'python', 'mobile': '18856565858', 'address': 'Hangzhou'}

Process finished with exit code 0

至此,mysql数据表中插入和查询完成......

图片

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!

未完,待续…

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

微信搜索公众号:就用python

更多内容欢迎关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值