FLASK MYSQL e bağlanamıyorum

flask kütüphanesinde mysql e bağlanmaya çalışıyorum ama şöyle bir hata alıyorum…
kodlarım:

from flask import Flask, render_template, flash, redirect, url_for, sessions, logging, request
from flask_mysqldb import MySQL
from wtforms import *
from passlib.hash import sha256_crypt



class KayitOl(Form):
    name = StringField("isim soyisim: ", validators=[validators.length(min=4, max=25),
                                                     validators.DataRequired])  # DataRequired mutlaka doldurulmalı demek.
    username = StringField("Kullanıcı Adı Soyadı: ",
                           validators=[validators.length(min=4, max=25), validators.DataRequired])
    email = StringField("email: ", validators=[validators.Email(message="geçersiz eposta")])
    password = PasswordField("Şifre: ", validators=[
        validators.DataRequired(message="lütfen bir parala belirleyin"),
        validators.EqualTo(fieldname="dogrulama", message="paralonız uyuşmuyor..")

    ])
    dogrulama = PasswordField("parola doğrula")


app = Flask(__name__)
app.config["MYSQL_HOST"] = "localhost"
app.config["MYSQL_USER"] = "root"
app.config["MYSQL_PASSWORD"] = ""
app.config["MYSQL_DB"] = "flask"  # tablonun ismi
app.config["MYSQL_CURSORCLASS"] = "DictCursor"  # bilgiler sözlük halinde gelsin diye

mysql = MySQL(app)


@app.route("/")
def deneme():
    cevap = "evet"
    return render_template("index.html", cevap=cevap)


@app.route("/about")
def deneme2():
    article = [
        {"id": 1, "title": "baris", "icerik": "barisin hayatın"},
        {"id": 2, "title": "meryem", "icerik": "meryemin hayatı hayatın"},
        {"id": 3, "title": "hasan", "icerik": "hasanın hayatında yaşadıkları"}

    ]

    return render_template("about.html", article=article)


@app.route("/article")
def deneme3():
    return render_template("article.html")


@app.route("/profil")
def deneme4():
    return render_template("profil.html")


@app.route("/article/<string:id>")
def deneme5(id):
    return "article id: {}".format(id)


if __name__ == "__main__":
    app.run(debug=True)

hata mersajı:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "app.py", line 2, in <module>
    from flask_mysqldb import MySQL
  File "C:\Users\baris\Desktop\flaskProject\venv\lib\site-packages\flask_mysqldb\__init__.py", line 1, in <module>
    import MySQLdb
  File "C:\Users\baris\Desktop\flaskProject\venv\lib\site-packages\MySQLdb\__init__.py", line 24, in <module>
    version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined

(venv) C:\Users\baris\Desktop\flaskProject>

öneri olarak şunu veriyor ama tam olarak anlayamadım ne yapmam gerektiğini…

try:
    from MySQLdb.release import version_info
    from . import _mysql

    assert version_info == _mysql.version_info
except Exception:
    raise ImportError(
        "this is MySQLdb version {}, but _mysql is version {!r}\n_mysql: {!r}".format(
            version_info, _mysql.version_info, _mysql.__file__
        )
    )

mysqlclient paketini kurup tekrar dener misiniz?

yükledim ama hala aynı hatayı veriyor

şuanda böyle bir hata alıyorum…

Paketleri bulamamasının sebebi yüksek ihtimalle çalıştığınız ortam ile alakalı. Yeni bir klasörde bir sanal ortam oluşturun. Flask projeniz için gerekli (Flask dahil) paketleri kurun. Küçük bir uygulama yazın. Tam olarak yapmak istediğiniz şeyi yapması yeterli. Ardından komut satırında sanal ortamı aktif edip flask projenizi çalıştırın. Sanal ortam oluşturmayı bilmiyorsanız:

  • Öncelikle sisteme virtualenv paketini kurun.
  • Yeni bir klasör oluşturun (masaüstünde olursa iyi olur)
  • Komut satırında o dizine gidip şu komutu girin:
  • virtualenv venv (venv sanal ortam ismi, baris da olabilirdi)
  • Sanal ortam klasöründe iken venv isminde klasör oluşacak.
  • Komut satırında venv/Scripts/ dizinine gidip activate dosyasını çalıştırın
  • Artık bu komut penceresinde kurduğunuz her paket sadece bu ortama özgü olacak.
2 Beğeni

4 saat uğraşını sonucunda (pip install flask-mysqldb) kütüphanesinin python 3.8 i desteklemediğini öğrendim 3.7.9 indirip olay çözüldü :slight_smile:

Sanal ortamın tam olarak işlevi nedir acaba ? kısaca bahseder misiniz

Önce Google’a sonra buraya

Örneğin github’da bir proje gördünüz ve o projeyi denemek istiyorsunuz. Yalnız, bu proje X ismindeki paketin 2. versiyonunu kullanıyor. Sizin sisteminizde ise 4. versiyon mevcut. Bu durumda 2 seçeneğiniz var; 4. versiyonu kaldırıp 2. versiyonu kuracaksınız, ya da 4. versiyon mevcut iken bir de 2. versiyonu kuracaksınız. 1. yöntem, her yeni paket kurulumundan önce yapmanız gerekeceği için sürekli zaman kaybetmenize sebep olur. 2 yöntem ise yüksek ihtimal ile isim çakışmasına ve daha fazla sorunlara sebep olur. Ancak, bir sanal ortam oluşturursanız o sanal ortamı çalıştıran komut satırı ile kurulan paketler sadece o ortama özgü olur. Dolayısıyla X paketinin hem 2. hem de 4. versiyonunu rahatlıkla kullanabilirsiniz.

Fakat bunun dışında, Python sürümü de önemli bir faktör. X paketinin bazı versiyonları Python 3’ü veya 2’yi desteklemiyor olabilir.

Aslında 1 sistemde Python’ın 2. ve 3. versiyonlarını kullanabiliyorsunuz. Yalnız, sanal ortam kendi içerisinde hangi Python sürümü ile oluşturulduysa o Python sürümünü kurup kullanır.

Son olarak; Sanal ortam aktif edilmeden içerisindeki paketler kullanılamaz. X paketi sanal ortamınızda mevcut olup, sisteminizde olmayabilir. Bu X paketini kullanan dosyanız sistemdeki Python ile çalıştırılırsa ‘modül bulunamadı’ hatası alırsınız.


al bak googleye yazınca çıkan :smiley:
Bir dahaki sefere birisine böyle bir uyarıda bulunmadan önce profiline göz atmanızı öneririm. Bunu yapmayı zaten biliyorum insanları yormayın lütfen. Anahtar kelimesi çok yaygın olduğu için buraya sordum.

Peki çok teşekkürler. Bu sanırım online python shellerindek de kullanılıyor öylemi ?

Kesin bilgim yok ama muhtemelen öyledir.

Profiline bakmak derken? Rozetleri mi kastediyorsunuz?

Aktiviteye bile bakarak zaten her zaman ilk yaptığım şeyin o olduğunu görebilirsiniz. Yazmış olmak için yazmayın demek istiyorum.

Şahsen bilgiyi tarayıcıda aratmanın daha fazla ve hızlı sonuca ulaştırılacağını düşünüyorum.Attığınız site yerine Wikipedia’ya bakmak daha iyi olmayacak mıydı?

Şöyle özetleyeyim. Sizin düşündüğünüzü bende düşünebiliyorum. O yüzden bana akıl vermeyi bırakın bu kadar.

Merhabalar, https://ask.yazilimbilimi.org/173/pip-install-flask-mysqldb-yükleme-hatası
Sitesinden hatanızı inceleyebilir, 3.8’ e uyumlu versiyonunu indirebilirsiniz ben 3.8 kullanıyorum ve sorunsuz bir şekilde çalışıyor.