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__
)
)
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.
Ö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
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.
Ş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ı?