Linux安装python并访问数据库
下载python3
这里下载的是python3.8.1
其他版本可以去python官网
//利用wget下载
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
ps:下了20分钟,这下载也太慢了
后记:注意不要卸载python。CentOS应该自带python2,由于yum是用python2.7写的,python3会导致无法解释python2.7语法。不过后面可以更改/usr/bin/yum把#!/usr/bin/python改为#!/usr/bin/python2,使其用更低的版本解释
yum用不了了?
解决:重新安装yum
安装python
安装依赖
yum install -y gcc patch libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
解压
#解压
tar -zxvf Python-3.8.1.tgz
mv Python-3.8.1 /usr/local
编译
cd /usr/local/Python-3.8.1
#编译
./configure --prefix=/usr/local/python
make
make install
添加软链接
ln -s /usr/local/python/bin/python3.8 /usr/bin/python
添加环境变量
#好像也可以不用添加
echo "PATH=$PATH:$HOME/bin:/usr/local/python/bin" >>/etc/environment
查看python是否安装成功,如果有输出,就成功了
python -V
Python语言是一款对缩进非常敏感的语言,tab和空格的混用会导致错误。
访问mysql数据库
需要先安装mysql驱动
cd /usr/local/python/bin
./pip3 install pymysql
创建一个目录存放python文件
cd
mkdir ~/python/book
vim ~/python/book/all.py
内容如下
1 import pymysql
2 import sys
3 #获得 mysql 查询的链接对象
4 db = pymysql.connect('localhost', 'root', 'root', 'database')
5 cur = db.cursor()
6 #执行查询
7 cur.execute("SELECT * FROM book")
8 #获取数据
9 rows = cur.fetchall()
10 for row in rows:
11 print ("%d %s %s %s %.2f" % (row[0], row[1],row[2],row[3],row[4]))
12 db.close()
运行,发现可以输出,
接着稍作修改部署到web
部署到web
安装Flask
/usr/local/python/bin/pip3.8 install flask
稍作修改all.py
import pymysql
import sys
from flask import Flask
from flask import render_template
#创建Flask实例
app = Flask(__name__)
#路由,当用户访问/all.py时,跳转到all()函数处理
@app.route('/all.py')
def all():
#获得 mysql 查询的链接对象
db = pymysql.connect('localhost', 'root', 'root', 'database')
cur = db.cursor()
#执行语句不变
cur.execute("SELECT * FROM book")
#获取数据方法不变
rows = cur.fetchall()
db.close()
#交给页面渲染
return render_template('all.html',u=rows)
if __name__ == '__main__':
#设置访问的ip和端口号
app.run(host='0.0.0.0',port=9002)
这里使用模板对页面进行渲染
在all.py同级的目录下,建立文件夹templates(注意,只能是这个名字)
编写模板
mkdir templates
vim templates/all.html
all.html内容如下
#all.html
#{% %}这个是控制流语句
#{{}}由这个可以访问到传递到本页面的数据
{% block title %}这是用nginx+python实现的页面{% endblock %}
{% block page_content %}
<table border='1'>
<tr>
<th>书号</th>
<th>书名</th>
<th>作者</th>
<th>出版社</th>
<th>价格</th>
</tr>
{% for i in u %}
<tr>
<td>{{ i[0] }}</td>
<td>{{ i[1] }}</td>
<td>{{ i[2] }}</td>
<td>{{ i[3] }}</td>
<td>{{ i[4] }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
控制台如下输出
浏览器如下输出
消除控制台的warning输出
消除:WARNING: This is a development server. Do not use it in a production deployment.
安装waitress
#安装waitress
/usr/local/python/bin/pip3.8 install waitress
对all.py的代码再做如下修改
if __name__ == '__main__':
from waitress import serve
#app.run(host='0.0.0.0',port=9002)
serve(app, host="0.0.0.0", port=9002)
让程序再后台运行,即可
python3 all.py&
部署到nginx
利用nginx的反向代理,用户访问nginx端口时,把请求交给python处理
修改nginx配置文件nginx.conf
vim /usr/loacl/nginx/conf/nginx.conf
添加如下代码
location ~\.py$ {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:9002;
}
注:需要先启动python程序监听9002端口