Bir python programı kullanarak bir MySQL veritabanına nasıl bağlanırım?
pymysql
çünkü bu karşılaştırmaya göre saf ücretsiz Python .
Bir python programı kullanarak bir MySQL veritabanına nasıl bağlanırım?
pymysql
çünkü bu karşılaştırmaya göre saf ücretsiz Python .
Yanıtlar:
1 - Ayar
Herhangi bir şey yapmadan önce bir MySQL sürücüsü kurmalısınız. PHP'nin aksine, Python ile varsayılan olarak yalnızca SQLite sürücüsü kurulur. Bunu yapmak için en çok kullanılan paket MySQLdb'dir, ancak easy_install kullanarak kurmak zordur. Lütfen MySQLdb'nin sadece Python 2'yi desteklediğini unutmayın.
Windows kullanıcısı için MySQLdb'den bir exe alabilirsiniz .
Linux için bu rahat bir pakettir (python-mysqldb). ( İndirmek için komut satırında sudo apt-get install python-mysqldb
(debian tabanlı dağıtımlar için), yum install MySQL-python
(rpm tabanlı için) veya dnf install python-mysql
(modern fedora dağıtım için) kullanabilirsiniz.)
Mac için, Macport kullanarak MySQLdb'yi yükleyebilirsiniz .
2 - Kullanım
Kurduktan sonra, Yeniden Başlat. Bu zorunlu değildir, ancak bir şeyler ters giderse bu yazıda 3 veya 4 soruya cevap vermem engellenir. Lütfen yeniden başlatın.
Sonra başka bir paket kullanmak gibi:
#!/usr/bin/python
import MySQLdb
db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="john", # your username
passwd="megajonhy", # your password
db="jonhydb") # name of the data base
# you must create a Cursor object. It will let
# you execute all the queries you need
cur = db.cursor()
# Use all the SQL you like
cur.execute("SELECT * FROM YOUR_TABLE_NAME")
# print all the first cell of all the rows
for row in cur.fetchall():
print row[0]
db.close()
Tabii ki, binlerce olasılık ve seçenek var; bu çok temel bir örnek. Belgelere bakmanız gerekecek. İyi bir başlangıç noktası .
3 - Daha gelişmiş kullanım
Nasıl çalıştığını öğrendikten sonra, SQL'i manuel olarak yazmaktan kaçınmak ve tablolarınızı Python nesneleri olarak değiştirmek için ORM kullanmak isteyebilirsiniz . Python topluluğundaki en ünlü ORM SQLAlchemy'dir .
Kullanmanızı şiddetle tavsiye ederim: hayatınız çok daha kolay olacak.
Geçenlerde Python dünyasında başka bir mücevher keşfettim: peewee . Çok lite bir ORM, kurulumu ve kullanımı gerçekten kolay ve hızlı. SQLAlchemy veya Django gibi büyük araçların kullanımının aşırı olduğu yerlerde küçük projeler veya bağımsız uygulamalar için günümü yapar:
import peewee
from peewee import *
db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')
class Book(peewee.Model):
author = peewee.CharField()
title = peewee.TextField()
class Meta:
database = db
Book.create_table()
book = Book(author="me", title='Peewee is cool')
book.save()
for book in Book.filter(author="me"):
print book.title
Bu örnek kutudan çıkar çıkmaz çalışır. Peewee ( pip install peewee
) dışında bir şey gerekmez.
pip install MySQL-python
Yalnızca Python 2'yi destekleyen MySQLdb kullanarak bunu yapmanın bir yolu :
#!/usr/bin/python
import MySQLdb
# Connect
db = MySQLdb.connect(host="localhost",
user="appuser",
passwd="",
db="onco")
cursor = db.cursor()
# Execute SQL select statement
cursor.execute("SELECT * FROM location")
# Commit your changes if writing
# In this case, we are only reading data
# db.commit()
# Get the number of rows in the resultset
numrows = cursor.rowcount
# Get and display one row at a time
for x in range(0, numrows):
row = cursor.fetchone()
print row[0], "-->", row[1]
# Close the connection
db.close()
No module named MySQLdb
. Paylaşılan barındırma üzerinde mysql python ile nasıl kullanabilirim. Alternatif var mı?
Oracle (MySQL) artık saf bir Python bağlayıcısını destekliyor. Bu, yüklenecek hiçbir ikili dosya olmadığı anlamına gelir: sadece bir Python kütüphanesi. Buna "Bağlayıcı / Python" denir.
MySQLdb'ye ihtiyacınız yoksa, ancak herhangi bir kütüphaneyi kabul ederseniz, MySQL'den MySQL Bağlayıcısı / Python'u çok, çok tavsiye ederim: http://dev.mysql.com/downloads/connector/python/ .
Bir paket (yaklaşık 110k), saf Python, bu yüzden sistemden bağımsız ve kurulumu basit. Sadece indirin, çift tıklayın, lisans sözleşmesini onaylayın ve gidin. Xcode, MacPorts, derleme, yeniden başlatma gerekmez ...
Sonra şöyle bağlanır:
import mysql.connector
cnx = mysql.connector.connect(user='scott', password='tiger',
host='127.0.0.1',
database='employees')
try:
cursor = cnx.cursor()
cursor.execute("""
select 3 from your_table
""")
result = cursor.fetchall()
print result
finally:
cnx.close()
rpm -i mysql-connector-python-1.1.5-1.el6.noarch.rpm
error: Failed dependencies:
rpmlib(FileDigests) <= 4.6.0-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
rpmlib(PayloadIsXz) <= 5.2-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
pip install mysql-connector-python
de çalışacak. PyPi'de artık desteklenmediğini söylediği yeri görmüyorum? Sisteminizdeki gcc / C derleyicilerine erişiminiz yoksa ve bu nedenle yükleyemiyorsanız harika mysqldb
.
pip search mysql-connector
paketi paket adını bulmak için sadece mysql-connector'tur . Buradan cevap verin: stackoverflow.com/a/22829966/2048266
Sadece python'dan mysql'e erişmek için mysql başlıklarını yüklemekten kaçınmak istiyorsanız MySQLDb'yi kullanmayı bırakın.
Pymysql kullanın . MySQLDb'nin yaptığı her şeyi yapar, ancak tamamen Harici Bağımlılık içermeyen Python'da uygulanmıştır . Bu, tüm işletim sistemlerinde yükleme işlemini tutarlı ve kolay hale getirir. pymysql
MySQLDb ve IMHO yerine bir damla olduğunu hiç bir şey için MySQLDb kullanmak için hiçbir neden yoktur ... HİÇ! - PTSD from installing MySQLDb on Mac OSX and *Nix systems
, ama bu sadece benim.
Kurulum
pip install pymysql
Hepsi bu ... oynamaya hazırsınız.
Pymysql Github repo'dan örnek kullanım
import pymysql.cursors
import pymysql
# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
# connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit()
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
connection.close()
Hızlı ve şeffaf bir şekilde mevcut kod MySQLdb değiştirin
MySQLdb kullanan bir kodunuz varsa, bu basit işlemi kullanarak bunu pymysql ile kolayca değiştirebilirsiniz:
# import MySQLdb << Remove this line and replace with:
import pymysql
pymysql.install_as_MySQLdb()
MySQLdb'ye sonradan yapılan tüm başvurular saydam olarak pymysql kullanır.
MySQLdb kullanmayı deneyin . MySQLdb yalnızca Python 2'yi destekler.
Burada bir sayfa gösterme yöntemi vardır: http://www.kitebird.com/articles/pydbapi.html
Sayfadan:
# server_version.py - retrieve and display database server version
import MySQLdb
conn = MySQLdb.connect (host = "localhost",
user = "testuser",
passwd = "testpass",
db = "test")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
localhost
) neyi destekler ?
Bir db sürücüsü olarak, bizim de vardır . Bu bağlantıda listelenen nedenlerden bazıları, oursql'in neden daha iyi olduğunu söylüyor:
- oursql, SQL ve verileri MySQL'e tamamen ayrı göndererek gerçek parametreleştirmeye sahiptir.
- oursql, istemcide her şeyin arabelleğe alınmasını istemek yerine metin veya ikili verilerin veritabanına akışına ve veritabanından akışa izin verir.
- oursql hem tembel olarak satır ekleyebilir hem de tembel olarak satır getirebilir.
- oursql varsayılan olarak unicode desteğine sahiptir.
- oursql, 2.6'dan sonraki herhangi bir kullanımdan kaldırma uyarısı olmadan (bkz. PEP 218) ve 2.7'de tamamen başarısız olmadan (bkz. PEP 328) python 2.4 ila 2.7'yi destekler.
- oursql yerel olarak python 3.x üzerinde çalışır.
MySQLd çok benzer:
import oursql
db_connection = oursql.connect(host='127.0.0.1',user='foo',passwd='foobar',db='db_name')
cur=db_connection.cursor()
cur.execute("SELECT * FROM `tbl_name`")
for row in cur.fetchall():
print row[0]
Belgelerinde öğretici oldukça iyi.
Ve tabii ki ORM SQLAlchemy için diğer cevaplarda da belirtildiği gibi iyi bir seçimdir.
MySQL bağlayıcısını kurmak için terminalinizde bu komutu çalıştırın:
pip install mysql-connector-python
Ve MySQL'e bağlanmak için python editörünüzde çalıştırın:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yusername",
passwd="password",
database="database_name"
)
MySQL Komutlarını yürütmek için örnekler (python ediorunuzda):
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")
mycursor.execute("SHOW TABLES")
mycursor.execute("INSERT INTO customers (name, address) VALUES ('John', 'Highway 21')")
mydb.commit() # Use this command after insert or update
Daha fazla komut için: https://www.w3schools.com/python/python_mysql_getstarted.asp
mysql-connector
. stackoverflow.com/questions/59405740/…
mydb.commit()
SQLAlchemy, uygulama geliştiricilerine SQL'in tam gücünü ve esnekliğini sağlayan Python SQL araç takımı ve Nesne İlişkisel Eşleyici'dir. SQLAlchemy, basit ve Pythonic etki alanı diline uyarlanmış verimli ve yüksek performanslı veritabanı erişimi için tasarlanmış, iyi bilinen kurumsal düzeyde kalıcılık kalıpları sunar.
pip install sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>")
session_obj = sessionmaker(bind=engine)
session = scoped_session(session_obj)
# insert into database
session.execute("insert into person values(2, 'random_name')")
session.flush()
session.commit()
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
Base = declarative_base()
engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>")
session_obj = sessionmaker(bind=engine)
session = scoped_session(session_obj)
# Bind the engine to the metadata of the Base class so that the
# declaratives can be accessed through a DBSession instance
Base.metadata.bind = engine
class Person(Base):
__tablename__ = 'person'
# Here we define columns for the table person
# Notice that each column is also a normal Python instance attribute.
id = Column(Integer, primary_key=True)
name = Column(String(250), nullable=False)
# insert into database
person_obj = Person(id=12, name="name")
session.add(person_obj)
session.flush()
session.commit()
Yukarıdaki tüm cevaplara rağmen, belirli bir veritabanına önceden bağlanmak istemiyorsanız, örneğin, veritabanını hala (!) Oluşturmak istiyorsanız connection.select_db(database)
, aşağıda gösterildiği gibi kullanabilirsiniz .
import pymysql.cursors
connection = pymysql.connect(host='localhost',
user='mahdi',
password='mahdi',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS "+database)
connection.select_db(database)
sql_create = "CREATE TABLE IF NOT EXISTS "+tablename+(timestamp DATETIME NOT NULL PRIMARY KEY)"
cursor.execute(sql_create)
connection.commit()
cursor.close()
MySQLdb kolay bir yoldur. Bir bağlantı üzerinden SQL sorguları yürütmek. Dönemi.
Pythonic olan tercih ettiğim yol, bunun yerine güçlü SQLAlchemy'yi kullanmaktır. İşte sorgu ile ilgili bir öğretici ve burada SQLALchemy ORM yetenekleri hakkında bir öğretici .
Python3.6 için iki sürücü buldum: pymysql ve mysqlclient. Aralarındaki performansı test ettim ve sonucu aldım: mysqlclient daha hızlı.
aşağıda benim test süreci (zaman elapse analiz etmek için python lib profilehooks yüklemek gerekir :
ham sql: select * from FOO;
mysql terminalinde derhal çalıştır:
46410 rows in set (0.10 sec)
pymysql (2.4s):
from profilehooks import profile
import pymysql.cursors
import pymysql
connection = pymysql.connect(host='localhost', user='root', db='foo')
c = connection.cursor()
@profile(immediate=True)
def read_by_pymysql():
c.execute("select * from FOO;")
res = c.fetchall()
read_by_pymysql()
mysqlclient (0.4s)
from profilehooks import profile
import MySQLdb
connection = MySQLdb.connect(host='localhost', user='root', db='foo')
c = connection.cursor()
@profile(immediate=True)
def read_by_mysqlclient():
c.execute("select * from FOO;")
res = c.fetchall()
read_by_mysqlclient()
Yani, mysqlclient, pymysql'den çok daha hızlı görünüyor
Bazılarınız bunu bir kopya olarak işaretleyip başka birinin cevabını kopyaladığım için üzülse de , gerçekten Bay Napik'in yanıtının bir yönünü vurgulamak isterim. Bunu kaçırdığım için ülke çapında web sitesi kesintisine (9dk) neden oldum. Bu bilgiyi yalnızca biri paylaşsaydı, önleyebilirdim!
İşte onun kodu:
import mysql.connector
cnx = mysql.connector.connect(user='scott', password='tiger',
host='127.0.0.1',
database='employees')
try:
cursor = cnx.cursor()
cursor.execute("""select 3 from your_table""")
result = cursor.fetchall()
print(result)
finally:
cnx.close()
Burada önemli olan Deneme ve Nihayet maddesidir. Bu HER ZAMAN bağlantılara izin verir , kodun imleç / sqlstatement bölümünde ne olursa olsun kapatılmasına . Birçok etkin bağlantı DBLoadNoCPU'nun yükselmesine neden olur ve bir db sunucusunu kilitleyebilir.
Umarım bu uyarı sunucuları ve sonuçta işleri kurtarır! : D
Python'dan MySQL'e bağlanmanın en iyi yolu, MySQL için Python ile çalışmak için resmi Oracle sürücüsü olduğundan ve hem Python 3 hem de Python 2 ile çalıştığı için MySQL Connector / Python kullanmaktır.
MySQL'i bağlamak için aşağıdaki adımları izleyin
pip kullanarak konektörü takın
pip install mysql-connector-python
veya yükleyiciyi https://dev.mysql.com/downloads/connector/python/ adresinden indirebilirsiniz.
connect()
MySQL.pass connect()
yöntemine bağlanmak için mysql bağlayıcı python yöntemini kullanın . Ana bilgisayar, kullanıcı adı, şifre ve veritabanı adı.
SQL sorgularını yürütmek için yöntemle cursor
döndürülen bağlantı nesnesinden nesne oluşturun connect()
.
işiniz tamamlandıktan sonra bağlantıyı kapatın.
Örnek :
import mysql.connector
from mysql.connector import Error
try:
conn = mysql.connector.connect(host='hostname',
database='db',
user='root',
password='passcode')
if conn.is_connected():
cursor = conn.cursor()
cursor.execute("select database();")
record = cursor.fetchall()
print ("You're connected to - ", record)
except Error as e :
print ("Print your error msg", e)
finally:
#closing database connection.
if(conn.is_connected()):
cursor.close()
conn.close()
Referans - https://pynative.com/python-mysql-database-connection/
MySQL Bağlayıcı Python'un Önemli API'sı
DML işlemleri için - Sorguyu çalıştırmak için cursor.execute()
ve tuşlarını kullanın cursor.executemany()
. ve bu kullanımdan connection.commit()
sonra DB'deki değişikliklerinizi devam ettirmek için
Kullan - veri getirmek için cursor.execute()
sorgu çalıştırmak için ve cursor.fetchall()
, cursor.fetchone()
, cursor.fetchmany(SIZE)
veri getirmek için
Sadece yukarıdaki cevapta bir değişiklik. Python için mysql yüklemek için bu komutu çalıştırın
sudo yum install MySQL-python
sudo apt-get install MySQL-python
hatırlamak! Büyük / küçük harfe duyarlıdır.
mysqlclient en iyisidir çünkü diğerleri sadece python'un belirli sürümlerine destek sağlar
pip install mysqlclient
örnek kod
import mysql.connector
import _mysql
db=_mysql.connect("127.0.0.1","root","umer","sys")
#db=_mysql.connect(host,user,password,db)
# Example of how to insert new values:
db.query("""INSERT INTO table1 VALUES ('01', 'myname')""")
db.store_result()
db.query("SELECT * FROM new1.table1 ;")
#new1 is scheme table1 is table mysql
res= db.store_result()
for i in range(res.num_rows()):
print(result.fetch_row())
mysql.connector
ve _mysql
(ikinci seçenek belgelerine göre çalışması gerektiğini rağmen) bir ithalat hatası hem verin. import MySQLdb
çalışır ve sonraMySQLdb.connect...
Ayrıca Storm'a bir göz atın . Sorguları yazmadan kolayca SQL girişlerini düzenlemenizi ve oluşturmanızı sağlayan basit bir SQL haritalama aracıdır.
İşte basit bir örnek:
from storm.locals import *
# User will be the mapped object; you have to create the table before mapping it
class User(object):
__storm_table__ = "user" # table name
ID = Int(primary=True) #field ID
name= Unicode() # field name
database = create_database("mysql://root:password@localhost:3306/databaseName")
store = Store(database)
user = User()
user.name = u"Mark"
print str(user.ID) # None
store.add(user)
store.flush() # ID is AUTO_INCREMENT
print str(user.ID) # 1 (ID)
store.commit() # commit all changes to the database
Kullanımı bulmak ve nesne kullanmak için:
michael = store.find(User, User.name == u"Michael").one()
print str(user.ID) # 10
Birincil anahtarla bul:
print store.get(User, 1).name #Mark
Daha fazla bilgi için öğreticiye bakın .
Bu Mysql DB bağlantısı
from flask import Flask, render_template, request
from flask_mysqldb import MySQL
app = Flask(__name__)
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DB'] = 'MyDB'
mysql = MySQL(app)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == "POST":
details = request.form
cur = mysql.connection.cursor()
cur.execute ("_Your query_")
mysql.connection.commit()
cur.close()
return 'success'
return render_template('index.html')
if __name__ == '__main__':
app.run()
önce sürücüyü yükleyin
pip install MySQL-python
Sonra temel bir kod şöyle gider:
#!/usr/bin/python
import MySQLdb
try:
db = MySQLdb.connect(host="localhost", # db server, can be a remote one
db="mydb" # database
user="mydb", # username
passwd="mydb123", # password for this username
)
# Create a Cursor object
cur = db.cursor()
# Create a query string. It can contain variables
query_string = "SELECT * FROM MY_TABLE"
# Execute the query
cur.execute(query_string)
# Get all the rows present the database
for each_row in cur.fetchall():
print each_row
# Close the connection
db.close()
except Exception, e:
print 'Error ', e
python kodunuzu bu şekilde mysql'e bağlayabilirsiniz.
import MySQLdb
db = MySQLdb.connect(host="localhost",
user="appuser",
passwd="",
db="onco")
cursor = db.cursor()
İlk önce sürücüyü yükleyin (Ubuntu)
sudo uygun-get install python-pip
sudo pip kurulum -U pip
sudo uygun-get install python-dev libmysqlclient-dev
sudo uygun-get install MySQL-python
MySQL veritabanı bağlantı kodları
import MySQLdb
conn = MySQLdb.connect (host = "localhost",user = "root",passwd = "pass",db = "dbname")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
Python 3.3 için
CyMySQL https://github.com/nakagami/CyMySQL
Benim windows 7 üzerinde pip yüklü, sadece pip cymysql yükleyin
(cython'a ihtiyacınız yok) hızlı ve ağrısız
İlk olarak, https://dev.mysql.com/downloads/connector/python/ adresinden python-mysql bağlayıcısını yükleyin
Python konsolunda şunu girin:
pip install mysql-connector-python-rf
import mysql.connector