python使用web.py构建web服务并实现对sqlite的增删改查

安装web.py

打开cmd输入

pip install web.py

等待安装完毕,同时需要安装好sqlite,并建好test.db库,创建sys_user(id, login_name, user_name, password)表。

demo

import web

urls = (
    '/upper/(.*)', 'upper',
    '/lower/(.*)', 'lower'
)

app = web.application(urls, globals())

class upper:
    def GET(self, text):
        print('input:' + text)
        return text.upper()


class lower:
    def GET(self, text):
        print('input:' + text)
        return text.lower()


if __name__ == '__main__':
    app.run()

例:打开localhost:8080/upper/ABCabc
可以返回ABCABC
这里,urls定义的是访问路径的调用类的映射关系,前面是路径,后面是类名,类里面的GET方法实现了get请求,该路径用post请求是请求不到的。
这里关于web.py第三方类库的使用方法可以参考:
https://webpy.org/cookbook/index.zh-cn


实现简单的增删改查api

首先我们先实现一个python对sqlite数据库操作类

import sqlite3

class sqlliteDBtool:
    def __init__(self):
        """
        初始化函数,创建数据库连接
        """
        self.conn = sqlite3.connect("d:/sqlite/test.db")
        self.conn.row_factory = self.dict_factory
        self.cursor = self.conn.cursor()

    @staticmethod
    def dict_factory(cursor, row):
   		"""
        对sqlite的查询结果转化成python的词典
        :param cursor: 游标
        :param row: 结果集
        :return: 返回词典
        """
        d = {}
        for idx, col in enumerate(cursor.description):
            d[col[0]] = row[idx]
        return d


    def executeUpdate(self, sql, param):
        """
        数据库的插入、修改函数
        :param sql: 传入的sql语句
        :param param: 传入的参数
        :return: 返回操作数据库状态
        """
        try:
            self.cursor.executemany(sql, param)
            i = self.conn.total_changes
        except Exception as e:
            print("错误类型:", e)
            return False
        finally:
            self.conn.commit()
        if i > 0:
            return True
        else:
            return False


    def excuteDelete(self, sql, param):
        """
        操作数据库删除
        :param sql: sql语句
        :param param: 参数
        :return: 返回数据库状态
        """
        try:
            self.cursor.execute(sql, param)
            i = self.conn.total_changes
        except Exception as e:
            print("错误类型:", e)
            return False
        finally:
            self.conn.commit()
        if i > 0:
            return True
        else:
            return False


    def excuteQuery(self, sql, param):
        """
        数据库数据查询
        :param sql: 传入的SQL语句
        :param param: 传入数据
        :return: 返回操作数据库状态
        """
        test = self.cursor.execute(sql, param)
        return test.fetchall()


    def close(self):
        """
        关闭数据库的连接
        :return:
        """
        self.cursor.close()
        self.conn.close()

然后写web服务

import web
from web_test.sqliteDBtool import sqlliteDBtool

urls = (
    '/findUser/(.*)', 'findUser',
    '/addUser', 'addUser',
    '/updateUser', 'updateUser',
    '/deleteUser/(\d)', 'deleteUser'
)


app = web.application(urls, globals())


class findUser:
    def GET(self, loginName):
        #data = web.input()
        db = sqlliteDBtool()
        #param = (data.get("loginName"), )
        if str(loginName).strip().__len__() > 0:
            sql = "select * from sys_user where login_name=?"
            param = (loginName, )
        else:
            sql = "select * from sys_user"
            param = ()
        res = db.excuteQuery(sql, param)
        db.close()
        return res


class addUser:
    def POST(self):
        data = web.input()
        param = [(int(data.get("id")), data.get("login_name"), data.get("user_name"), data.get("password"), )]
        db = sqlliteDBtool()
        res = db.executeUpdate("insert into sys_user(id,login_name,user_name,password) values(?,?,?,?)",
                               param)
        db.close()
        return res


class updateUser:
    def POST(self):
        data = web.input()
        param = [(data.get("login_name"), data.get("user_name"), data.get("password"), int(data.get("id")), )]
        print(param[0][0])
        db = sqlliteDBtool()
        res = db.executeUpdate("update sys_user set login_name=?,user_name=?,password=? where id=?",
                               param)
        db.close()
        return res


class deleteUser:
    def GET(self, id):
        db = sqlliteDBtool()
        param = (id, )
        res = db.excuteDelete("delete from sys_user where id=?", param)
        db.close()
        return res;


if __name__ == '__main__':
    app.run()

项目结构如下图:
项目结构
此处没有用到web.py的html模板,只测试了前后端分离的情况,后端提供接口返回json数据。
测试结果如下:
查询
添加一条记录:
添加
查询数据库:
数据库1
可以发现增加成功。
修改和删除也都能通过测试,到此,简单的web接口服务实现完毕。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面演示一个使用Python的Flask框架来实现一个简单的增删改查的源码示例: ```python from flask import Flask, request app = Flask(__name__) items = [] # 存储数据的列表 # 查询接口 @app.route('/items', methods=['GET']) def get_items(): if not items: return '暂无数据' item_list = ', '.join(items) return f'当前数据为: {item_list}' # 增加接口 @app.route('/items', methods=['POST']) def add_item(): item = request.form.get('item') if not item: return '请输入要添加的数据' items.append(item) return f'成功添加数据: {item}' # 删除接口 @app.route('/items/<item>', methods=['DELETE']) def delete_item(item): if item in items: items.remove(item) return f'成功删除数据: {item}' else: return f'未找到数据: {item}' # 修改接口 @app.route('/items/<item>', methods=['PUT']) def update_item(item): new_item = request.form.get('new_item') if not new_item: return '请输入要修改的数据' if item in items: items[items.index(item)] = new_item return f'成功修改数据: {item} -> {new_item}' else: return f'未找到数据: {item}' if __name__ == '__main__': app.run() ``` 上述代码使用Flask框架创建了一个简单的web应用,包含了四个接口:`/items` GET方法用于查询所有数据,POST方法用于增加数据,DELETE方法用于删除数据,PUT方法用于修改数据。 可以使用`curl`命令来测试上述接口的功能,例如: - 查询所有数据:`curl http://localhost:5000/items` - 增加数据:`curl -X POST -d "item=apple" http://localhost:5000/items` - 删除数据:`curl -X DELETE http://localhost:5000/items/apple` - 修改数据:`curl -X PUT -d "new_item=banana" http://localhost:5000/items/apple` 使用上述接口即可进行简单的增删改查操作。 ### 回答2: Python web实现简单的增删改查源码可以通过使用Python的Web框架(如Flask或Django)来实现。下面是一个使用Flask框架的示例代码: ```python from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) # 创建一个虚拟的数据库,用于存储数据 database = [] @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': # 获取用户输入的数据 data = request.form['data'] # 将数据保存到数据库中 database.append(data) return redirect(url_for('index')) # 显示数据库中的数据 return render_template('index.html', data=database) @app.route('/delete/<int:index>', methods=['GET', 'POST']) def delete(index): # 从数据库中删除指定位置的数据 database.pop(index) return redirect(url_for('index')) @app.route('/update/<int:index>', methods=['GET', 'POST']) def update(index): if request.method == 'POST': # 获取用户输入的数据 data = request.form['data'] # 更新数据库中指定位置的数据 database[index] = data return redirect(url_for('index')) # 显示要更新的数据 return render_template('update.html', data=database[index]) if __name__ == '__main__': app.run() ``` 在这个例子中,我们使用Flask框架创建了一个Web应用。首页展示了数据库中的数据,并提供了一个表单用于添加新的数据。删除操作和更新操作分别是在`/delete/<int:index>`和`/update/<int:index>`的URL下进行的。 请注意,这只是一个简单示例,真实的web应用可能需要更严谨的验证和错误处理机制。 ### 回答3: 下面是一个用Python编写的简单的Web应用,实现增删改查的功能。这个应用使用了Flask框架来搭建Web服务器,并使用SQLite作为数据库存储数据。 ```python from flask import Flask, request, jsonify import sqlite3 app = Flask(__name__) # 创建数据库连接 conn = sqlite3.connect('data.db') c = conn.cursor() # 创建数据表 c.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT ) ''') conn.commit() @app.route('/users', methods=['GET']) def get_users(): c.execute('SELECT * FROM users') rows = c.fetchall() users = [{'id': row[0], 'name': row[1], 'email': row[2]} for row in rows] return jsonify(users) @app.route('/users', methods=['POST']) def add_user(): name = request.json['name'] email = request.json['email'] c.execute('INSERT INTO users (name, email) VALUES (?, ?)', (name, email)) conn.commit() return jsonify({'message': 'User added successfully'}) @app.route('/users/<int:user_id>', methods=['PUT']) def update_user(user_id): c.execute('SELECT * FROM users WHERE id = ?', (user_id,)) user = c.fetchone() if user is None: return jsonify({'message': 'User not found'}) name = request.json['name'] email = request.json['email'] c.execute('UPDATE users SET name = ?, email = ? WHERE id = ?', (name, email, user_id)) conn.commit() return jsonify({'message': 'User updated successfully'}) @app.route('/users/<int:user_id>', methods=['DELETE']) def delete_user(user_id): c.execute('SELECT * FROM users WHERE id = ?', (user_id,)) user = c.fetchone() if user is None: return jsonify({'message': 'User not found'}) c.execute('DELETE FROM users WHERE id = ?', (user_id,)) conn.commit() return jsonify({'message': 'User deleted successfully'}) if __name__ == '__main__': app.run() ``` 这个应用中定义了四个路由,分别对应了查询所有用户、添加用户、更新用户和删除用户的操作。它们分别使用GET、POST、PUT和DELETE方法。 这个应用中的数据库使用SQLite,并且在运行应用时会自动创建数据库和数据表。用户的数据包含id、name和email字段。对于添加用户和更新用户的操作,用户信息通过JSON格式的请求体发送。 这个应用可以通过运行`python app.py`启动,然后可以使用HTTP客户端进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值