Python3 环境下使用 MySQLdb 库

23 篇文章 4 订阅
4 篇文章 0 订阅

在Python3 下不能直接 pip install MySQLdb?
本文给出两种常用的解决方案

文章目录:
解决方案 1 之 mysqlclient
解决方案 2 之 pymysql


解决方案 1 之 mysqlclient

可以使用下面的指令替换
pip install mysqlclient

下面直接测试

import MySQLdb

发现可以直接导入 MySQLdb了,相当于安装了 MySQLdb 这个依赖库



再模拟一个 Tornado 框架下注册的功能进行测试
首先需要安装 tornado
pip install tornado

示例代码 test_mysqldb.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@version: v1.0
@author: Evan
@time: 2019/12/3 16:31

use `pip install mysqlclient` to install MySQLdb
"""
import tornado.web
import tornado.ioloop
import MySQLdb
"""
    :param str host:        host to connect
    :param str user:        user to connect as
    :param str password:    password to use
    :param str passwd:      alias of password, for backward compatibility
    :param str database:    database to use
    :param str db:          alias of database, for backward compatibility
    :param int port:        TCP/IP port to connect to
    :param str unix_socket: location of unix_socket to use
    :param dict conv:       conversion dictionary, see MySQLdb.converters
    :param int connect_timeout:
    ...
"""


def _get_connect():
    return MySQLdb.connect(
        host='127.0.0.1',
        user='root',
        passwd='root',
        db='tornado_test',
        port=3306
    )


class RegisterHandler(tornado.web.RequestHandler):

    def initialize(self, connect):
        self.connect = connect

    def get(self):
        self.render('templates/register.html')

    def post(self):
        # 获取请求参数
        username = self.get_body_argument('account')
        password = self.get_body_argument('password')

        # 将数据插入到数据库中
        try:
            cursor = self.connect.cursor()
            # MySQL获取系统当前时间函数:sysdate() / now()
            cursor.execute('insert into t_user values(null, "{0}", "{1}", sysdate())'.format(username, password))
            self.connect.commit()
            self.write('注册成功!')
        except Exception as ret:
            print(ret)
            self.connect.rollback()
            self.redirect('/register/')


def main():
    app = tornado.web.Application([
        (r'^/register/$', RegisterHandler, {'connect': _get_connect()}),
    ])

    app.listen(8888)

    tornado.ioloop.IOLoop.current().start()


if __name__ == '__main__':
    main()

前端页面 templates/register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="/register/" enctype="multipart/form-data" method="POST">
        用户名:<input type="text" name="account"/> <br/><br/>&emsp;码: <input type="password" name="password"/> <br/><br/>

        &emsp;&emsp;<input type="submit" value="注册"/>
    </form>

</body>
</html>

数据库创建 sql

create database tornado_test default CHARACTER set utf8;

use tornado_test;

在用数据库可视化软件(如 Navicat)创建数据表 t_user,也可直接使用 sql 来创建
在这里插入图片描述



解决方案 2 之 pymysql

首先安装依赖包
pip install pymysql

然后将下面的代码放入__init__.pyprojectname/__init__.py

import pymysql
pymysql.install_as_MySQLdb()

此解决方案在之前的 Django 开发中使用过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值