在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/>
密 碼: <input type="password" name="password"/> <br/><br/>
  <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__.py
(projectname/__init__.py
)
import pymysql
pymysql.install_as_MySQLdb()
此解決方案在之前的 Django 開發中使用過