Python与Mysql交互

#转载请联系html

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

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

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

1.安装pymysql模块nginx

2.pymysql的使用web

  • 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交互的方式很简单,可是有一个大坑必定要注意,否则真的总是出错!sql

经过一个程序来看下这个坑!数据库

 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行!apache

item是input获取的,因此是字符串。字符串在python中输出都是带 " " 的。可是!他在第9行插进 sql 语句时,不会把 " " 带进去,只带本身的值。因此他在 sql 语句中是一个整数!服务器

因此,当咱们的 sql 语句须要 " " 时,必定要写,字符串的 " " 是带不进去的!

 

说在最后,其实这篇文章的操做还有不足之处。就是恶意的人会经过input输入其余内容,就能够获取数据库的其余内容!

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

相关文章
相关标签/搜索