Python3 環境下使用 MySQLdb 庫

在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 開發中使用過

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章