Python'daki bir MySQL Veritabanına nasıl bağlanırım?


1163

Bir python programı kullanarak bir MySQL veritabanına nasıl bağlanırım?


44
Çoğu yanıt burada MySQLdb kütüphanesini kurmaya odaklanıyor, gerçekten MySQL / Oracle tarafından sağlanan MySQL Bağlayıcı / Python'u seçmenizi öneririm, bu da süreci çok daha basit hale getirir: stackoverflow.com/questions/372885/…
Mr. Napik

8
Oracle'ın Connector / Python'unu kullanmayla ilgili sorun, ince hatalara ve diğer entegrasyon sorunlarına sahip olmasıdır. Kurulumu kolaydır, ancak denediğim tüm gerçek dünya kullanım durumlarında çalışmak neredeyse imkansızdır. Bu yüzden neden hep MySQLdb öneririm.
Joe

7
@ Mr.Napik kullanıyorum pymysqlçünkü bu karşılaştırmaya göre saf ücretsiz Python .
Cees Timmerman

Yanıtlar:


1246

Python 2 ile MYSQL'e üç adımda bağlanma

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.


46
Peewee gibi sevindim !! MySQL için destek ve bununla entegrasyon hakkında bazı belgeler ekledim . Mutlu hack!
coleifer

14
Bunu yazarken, MySQLdb Python 3'ü desteklemez. Sourceforge sayfasında "Python 3 desteği yakında geliyor" yazıyor, ancak 2012-10-08'den beri güncellenmemiştir. Python 3 için PyMySQL ve oursql var .
paul

8
Ayrıca aşağıdakilere dikkat edin:pip install MySQL-python
Ben Crowhurst

5
Bu yanıt, nasıl yapılacağını göstermek için standart olmayan bir bağlantı noktasındaki harici bir sunucuya örnek bir bağlantı ile daha yararlı olacaktır. Localhost demek, bunu yapmanın olağan yoludur.
Anthony

3
Peewee varsayılan davranışı değiştirdi ve artık otomatik olarak varsayılan ayar kullanmıyor. DB sürücüsü durumu bile şimdi değişti. Sorunun güncellenmesi gerekiyor, ancak bazı yanıtlarımdaki düzenlemelerin kötüye kullanılması nedeniyle artık bunları düzenlemiyorum.
e-satis

189

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()

Burada referans


4
veritabanını değiştirmediğiniz için bu örnekte işlem yapmaya ihtiyaç var mı?
sumanth232

3
DİKKAT - Bu modülün bağlantıda saat dilimi desteği yoktur
kommradHomer

Paylaşılan barındırma üzerinde çalışmıyor. Bunu söyleyerek No module named MySQLdb. Paylaşılan barındırma üzerinde mysql python ile nasıl kullanabilirim. Alternatif var mı?
Bhavesh Gangani

@BhaveshGangani, sunucunuzla iletişim kurmanız ve Python kitaplıklarının neden desteklediklerini sormanız gerekir. Pypi'yi destekliyorlarsa, dağıtımınız gerçekleştiğinde paketi her zaman yükleyebilirsiniz.
George Stocker

1
İlginç bir şekilde, dokümanlar bu sadece python 2 ile çalıştığını söylüyor olsa da, benim için python 3 ile çalışıyor gibi görünüyor
lucidbrot

122

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.

http://dev.mysql.com/downloads/connector/python/


1
mysqldb kullanmaktan daha mı hızlı?
alwbtc

8
Evet öyle. Ayrıca, MySQLdb'den daha az güçlük çekiyor ve bence API daha iyi. Cevap bu olmalı.
Anthony

1
resmi python mysql konnektörü kullanarak zaman kazanmak için en iyi yoldur
Anas

2
@ J0hnG4lt Giriş formunun altındaki "Hayır, teşekkürler, sadece indirmeye başla" yı tıklayabilirsiniz (aslında zorunlu görünüyor, ancak değil).
ComFreek

6
@ComFreek harika. Bu nasıl daha iyi? "Windows iş akışını" uygulamayı durdurabilir miyiz? Paket yönetimi var.
J0hnG4lt

120

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()

2
İddia ettiğiniz kadar basit değil. RPM yüklemeye çalıştığımda RPM'imden birkaç bağımlılık sorunu (FileDigests ve PayloadIsXz) aldım: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
tatlar

2
Eskiden bu kütüphaneyi tercih ederdim ama artık resmi olarak PyPi'de desteklenmiyor. O zamandan beri MySQLdb'ye taşındım.
Steven Mercatante

2
@Arms: Artık PyPi'de resmi olarak desteklenmiyor mu? Bunun için kaynağın var mı?
Messa

7
pip install mysql-connector-pythonde ç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.
decvalts

7
7 Kasım 2016 itibarıyla, pip pip search mysql-connectorpaketi paket adını bulmak için sadece mysql-connector'tur . Buradan cevap verin: stackoverflow.com/a/22829966/2048266
nommer

117

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. pymysqlMySQLDb 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.


3
"Her zaman" biraz güçlü ... Peewee veya sqlalchemy'de sorun nedir? ORM kütüphaneleri olarak var olsalar bile, hala aynı derecede kullanışlıdırlar
OneCricketeer

4
Hayır, hiç güçlü olduğunu sanmıyorum. MySQLDb veya PyMysql kullanma seçeneği göz önüne alındığında, MySQLDb çalışmak için işletim sistemi platformunuz için mysql geliştirme başlık dosyalarının yüklenmesini gerektirirken, bağımlılıkları olmayan basit bir pip yükleme olduğu için PyMysql'i seçmenin bir beyinsiz olduğunu düşünüyorum. Sqlalchemy buna dahil değildir çünkü hala PyMysql, MySQLDb, CyMySQL vb. Gibi mysql ile konuşabilen bir modülün etrafına sarılması gerekiyor, ancak Peewee ilginç görünüyor, kontrol edeceğim
OkezieE

2
@ cricket_007 çok ufak ve sqlalchemly kendi db konektörü uygulamak yok, MySQLdb vb üzerinde bir tabaka sağlamak
rocksportrocker

25

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 ()

2
DİKKAT - Bu modülün bağlantıda saat dilimi desteği yoktur
kommradHomer

1
@kommradHomer Lütfen biraz ayrıntı verebilir misiniz?
Pyderman

1
@kommradHomer - saat dilimi sizin için (veya başkaları için - özellikle bağlanırken localhost) neyi destekler ?
warren

1
@warren hayır, benim durumumda localhost bağlanmadı
kommradHomer

1
Bir veritabanına bağlanmak için hangi kitaplığın yüklü olduğunu nasıl belirlerim?
posfan12

18

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.

Peki mysql oursql ile nasıl bağlanı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.


4
'Doğal olarak python 3.x üzerinde çalışır' anlamıyorum. Sadece yüklemeyi denedim ve Python 3 uyumlu yazdırma çağrılarını bile kullanmadığı için setup.py bombaları. Gerçekten denemek kadar harika geliyordu.
otakucode

15

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


Lütfen buna cevap verebilir misiniz? Sadece ile ilgilidir mysql-connector. stackoverflow.com/questions/59405740/…

1
Bazı çocuklar sorunuzu orada zaten yanıtladı. mydb.commit()
Tabloya

13

sqlalchemy


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.

Kurulum

pip install sqlalchemy

RAW sorgusu

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()

ORM yolu

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()

11

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()


6

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()

İşte pymysql profili: resim açıklamasını buraya girin


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()

İşte mysqlclient profili: resim açıklamasını buraya girin

Yani, mysqlclient, pymysql'den çok daha hızlı görünüyor


6

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


6

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

  1. pip kullanarak konektörü takın

    pip install mysql-connector-python

veya yükleyiciyi https://dev.mysql.com/downloads/connector/python/ adresinden indirebilirsiniz.

  1. 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ı.

  2. SQL sorgularını yürütmek için yöntemle cursordöndürülen bağlantı nesnesinden nesne oluşturun connect().

  3. 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


* İle bağlandınız ...
John Forbes

5

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.


MySQL-python'u yum kurulumu ile kurdum. Kurulum tamamlandı ancak MySQLdb modülünü içe aktaramıyorum. Böyle bir modül yok diyor. Neden böyle olduğu hakkında bir fikrin var mı?
user3527975

"Yukarıdaki cevap" derken hangi cevabı kastettiğiniz açık değildir. Lütfen yanıtınızı kendi içinde tamamlayın. Başka cevaplara başvurmak istiyorsanız, lütfen ilgili cevaba bağlantı verin.
Flimm

5

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())

bkz. https://github.com/PyMySQL/mysqlclient-python


Ancak piton 3. için hızlı çözümü önermek için 1, mysql.connectorve _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...
Suzana

3

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 .


2

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()

1

ö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 

1

python kodunuzu bu şekilde mysql'e bağlayabilirsiniz.

import MySQLdb
db = MySQLdb.connect(host="localhost",
                 user="appuser",
                 passwd="",
                 db="onco")

cursor = db.cursor()

1

İ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 ()

0

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


3
SO hakkında yeni bir soru oluşturabilir ve burada bir bağlantıyla yorum yapabilirsiniz.
Lazik

-1

İ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

1
Soru biraz fazla genişti, ancak bu cevap biraz çok dar görünüyor (en azından bir modülü takıp ithal etmenin bir anlamı yok). Ayrıca nereye gittiğini ve ne yaptığını wrt herhangi bir açıklama veya ipucu olmadan tek kod bloğunda karıştırılmış kabuk ve python gibi görünüyor.
Ondrej K.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.