本文讲述了在Python3下如何使用tornado框架及sqlalchemy对MySQL数据库进行简单的增、删、改、查操作。整个流程走通之后,就可以在实际开发中对本文中的例子进行重构、优化,以满足产品需要。
环境:Window7 x64、MySQL 5.6.21、Python 3.4.1、tornado 4.0.2、MySQL-Connector-Python 2.0.1、SQLAlchemy 0.9.8
以上这些软件的安装方法在我的另一篇博文里,如有需要请移步至:构建一个完整的基于Python3的Web开发环境。
在本文的例子中,我们维护一个用户数据库,数据库中包含了用户名、年龄、性别、得分、主修专业。可以通过WEB页面来增加、删除用户,以及修改、显示所有的用户信息。
一、在MySQL中建立数据库及相关表
我们的重点是用最简单的步骤实现整个MVC流程,所以建立数据库的操作就不使用SQLAlchemy来做了。
先在Windows的命令提示符下连接到MySQL,并建立一个名为UserManager的数据库。命令如下所示:
e:\>mysql -u root -p
password:********
mysql>CREATE DATABASE UserManager;
注意第一行-u后面的root是数据库的用户名,应当按照实际情况输入。password后面的密码也要按照你自己系统的实际情况填写。
然后键入命令 USE UserManager 进入到UserManager数据库中,新建一个如下结构的表user:
CREATE TABLE user(
id int(16) not null primary key auto_increment,
user_name varchar(32) not null,
user_age int(3) not null,
user_sex int(1) not null,
user_score int(3) not null,
user_subject varchar(32) not null );
之后我们所有的操作都是针对这张表进行的。
二、建立HTML模板页
我们使用tornado内置的模板进行HTML的渲染,速度虽然不是最快的,但是简单实用。熟练之后可以用Jinja2等更专业的模板替换掉tornado内置的模板。
tornado内置模板的语法非常简单,语法块默认由{% ... ... %}包含,变量则由{ { ... ... }}包含。当然也以设置为其它样式的Limiter。
本文的例子中包含两个WEB页面:UserManager.html以及EditUserInfo.html。下面分别是这两个页面的代码。
页面 UserManager.html:
<html>
<head>
<!--这里的{
{title}}表示title这个变量的内容由服务器端产生并填写到该位置-->
<title>{
{title}}</title>
<body>
<center><h1>Welcome to UserManager</h1></center>
<hr/>
<center>
<!--表单以POST方式提交到AddUser-->
<form name = 'new_user' action = 'AddUser' method = 'post'>
Name:<input type = 'text' name = 'user_name' />
Age:<input type = 'text' name = 'user_age' />
Sex:<input type = 'text' name = 'user_sex' />
Score:<input type = 'text' name = 'user_score' />
Subject:<input type = 'text' name = 'user_subject' />
<input type = 'submit' value = 'Submit' />
<input type = 'reset' value = 'Reset' />
</form>
<hr/>
<table border = 1>
<tr style = 'font-weight:bold' align = 'center'>
<td width = '200' >Name</td>
<td width = '100' >Age</td>
<td width = '100' >Sex</td>
<td width = '100' >Score</td>
<td width = '200' >Subject</td>
<td width = '100' ></td>
<td width = '100' ></td>
</tr>
<!--users是一个由服务器端通过查询数据库而产生的列表,这里用for语句可以把用户信息全部输出-->
{% for user in users %}
<tr align