質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.96%

python3でMySQLを使うことができません。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,564

s.k

score 266

前提・実現したいこと

ローカルでPython3とMySQLの接続を行いたいです!

発生している問題・エラーメッセージ

sagaemiyakowarenoMacBook-Pro:workspace keiga$ python3 guestbook.py
Traceback (most recent call last):
  File "guestbook.py", line 3, in <module>
    import MySQLdb
  File "/Users/keiga/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Users/keiga/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/keiga/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
  Reason: image not found

該当のソースコード

【guestbook.py】

# coding: utf-8
import shelve
import MySQLdb


from flask import Flask, request, render_template, redirect, escape, Markup
from datetime import datetime

application = Flask(__name__)


DATA_FILE = 'guestbook.dat'

def save_data(name, comment, create_at):


    con = MySQLdb.connect(
            unix_socket = '/Applications/MAMP/tmp/mysql/mysql.sock',
            user='xxxxx',
            passwd='xxxxx',
            host='localhost',
            db='python_character')

    # カーソルを取得する
    cur= con.cursor()



    database = shelve.open(DATA_FILE)
    if 'greeting_list' not in database:
        greeting_list = []
    else:
        greeting_list = database['greeting_list']
    greeting_list.insert(0, {
        'name': name,
        'comment': comment,
        'create_at': create_at,
    })

    database['greeting_list'] = greeting_list
    database.close()

def load_data():
    database = shelve.open(DATA_FILE)
    greeting_list = database.get('greeting_list', [])
    database.close()
    return greeting_list

@application.route('/post', methods=['POST'])
def post():
    name = request.form.get('name')
    comment = request.form.get('comment')
    create_at = datetime.now()
    save_data(name, comment, create_at)
    return redirect('/')

@application.route('/post_index', methods=['POST'])

def post_index():
    adobe = request.form.get('adobe')
    return redirect('/')


@application.route('/')
def index():
    greeting_list = load_data()
    return render_template('index.html', greeting_list=greeting_list)

@application.route('/top')

def top():
    return render_template('top.html')

@application.template_filter('nl2br')
def nl2br_filter(s):
    return escape(s).replace('\n', Markup('<br>'))

@application.template_filter('datetime_fmt')

def datetime_fmt_filter(dt):
    return dt.strftime('%Y/%m/%d %H:%M:%S')

if __name__ == '__main__':
    application.run('127.0.0.1', 8000, debug=True)

mysqlclientはローカルにインストールできています。

sagaemiyakowarenoMacBook-Pro:workspace keiga$ pip install mysqlclient
Requirement already satisfied: mysqlclient in /Users/keiga/.pyenv/versions/anaconda3-4.0.0/lib/python3.5/site-packages
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

python - psycopg2 installation error - Library not loaded: libssl.dylib - Stack Overflow によると、libssl と libcrypto のバージョンが古すぎるのが原因なようです。(macOSに付属しているオープンソースソフトウェアは総じて時代遅れです...)

実は Anaconda には適切なバージョンの同ライブラリが同梱されているのですが、それらをロードできない不具合があるようです。最新の anaconda3-4.3.1 を使ったところ正常に動作したので、バージョンアップをおすすめします。

もしどうしても古い 4.0.0 を使う必要があるのであれば、Homwbrew で最新の openssl をインストールし、それを参照するようにシンボリックリンクを張る方法が考えられます。(Mac全体に悪影響を及ぼす可能性があるため、あまりおすすめできませんが...)

brew install -upgrade openssl
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/22 12:28

    ありがとうございます!
    一人では解決にかなり時間がかかりそうでした。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る