zoukankan      html  css  js  c++  java
  • Python与Mysql交互

    #转载请联系

    在写内容之前,先放一张图,bling~

    这张图算是比较详细的表达出了web开发都需要什么。用户访问网页,就是访问服务器的网页文件。这些网页文件由前端工程师编写的。服务器通常用nginx/apache(LNMP/LAMP)。这时候,用户能浏览到页面了。当用户需要登录时,肯定要核对用户名密码正不正确呀。这时候,服务器会把数据传输给web框架了,就是我们的python应用程序。python应用程序和mysql数据库进行通信,查询一下这个用户的用户名和密码,再对比一下服务器传来的。两者一致,就可以登录啦。所以,python在web全过程中充当着处理数据的作用。

    既然是处理数据,那么与数据库的通信是必不可少的了。现在就开始了解下他们怎么实现通信。

    1.安装pymysql模块

    2.pymysql的使用

    • import pymysql
    • 创建connection连接对象
    conn = pymysql.connection(host='localhost',user='xxx',password='xxx',database='xxx',port=xxx,charset='utf8')
    • 取得cursor游标对象
    cur = conn.cursor()  # 取得的是元组游标
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 拓展!取得的是字典游标
    • 通过cursor游标执行sql命令
    affect_rows = cur.execute('sql语句')
    # 执行SQL语句,返回受影响的行数
    # affect_rows是受影响的行数,一个数
    • 通过cursor游标取得执行结果
    result = cur.fetchall()
    print(result)
    # cur.fetchone()返回一个元组,形如(1,'妲己',18) # cur.fetchall()获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回,形如((1,'公孙离',20),(2,'妲己',18))
    # 注意:用fetchone抓取一条数据后,再用fetchall抓取数据,是从第二条开始抓取,抓取剩余的全部
    • 如果是对数据库的增删改,还有提交这一步骤。
    conn.commit()
    • 关闭游标cursor
    cur.close()
    • 关闭连接
    conn.close()

    python与mysql交互的方式很简单,但是有一个大坑一定要注意,不然真的老是出错!

    通过一个程序来看下这个坑!

     1 import pymysql
     2 
     3 
     4 def main():
     5     conn = pymysql.connect(host='localhost',port=3306,user='root',password='xxx',
     6                            database='db_jingdong',charset='utf8')
     7     cur = conn.cursor()
     8     item = input("请输入你要查询商品信息的商品id:")
     9     cur.execute('select * from goods where id=%s' % item)
    10     result = cur.fetchall()
    11     print(result)
    12 
    13 
    14 if __name__ == '__main__':
    15     main()

    看第9行!

    item是input获取的,所以是字符串。字符串在python中输出都是带 " " 的。但是!他在第9行插进 sql 语句时,不会把 " " 带进去,只带自己的值。所以他在 sql 语句中是一个整数!

    所以,当我们的 sql 语句需要 " " 时,一定要写,字符串的 " " 是带不进去的!

    说在最后,其实这篇文章的操作还有不足之处。就是恶意的人会通过input输入其他内容,就可以获取数据库的其他内容!

    原理是什么?怎么避免?请看我的这一篇博文:https://www.cnblogs.com/chichung/p/9596716.html

  • 相关阅读:
    笨方法学python中执行argv提示ValueError: not enough values to unpack (expected 4, got 1)
    VMware workstation安装
    Redis bigkey分析
    MySQL drop table 影响及过程
    MySQL 大表硬连接删除
    ES elasticsearch 各种查询
    ES elasticsearch 各种聚合
    ES elasticsearch 聚合统计
    ES elasticsearch 实现 count单字段,分组取前多少位,以地理位置中心进行统计
    MySQL行溢出、varchar最多能存多少字符
  • 原文地址:https://www.cnblogs.com/chichung/p/9594354.html
Copyright © 2011-2022 走看看