2015-02-10 17 views
6

Anaconda dağıtımından Python 3.4 kullanıyorum. Bu dağıtım içinde, başka bir bilgisayarda bulunan mevcut bir MySQL veritabanına bağlanmak için pymysql kitaplığını buldum.Python'da MySQL veritabanını alay

import pymysql 
config = { 
     'user': 'my_user', 
     'passwd': 'my_passwd', 
     'host': 'my_host', 
     'port': my_port 
    } 

    try: 
     cnx = pymysql.connect(**config) 
    except pymysql.err.OperationalError : 
     sys.exit("Invalid Input: Wrong username/database or password") 

Ben şimdi tercihen bellekte, her test davanın setUp de çok küçük bir veritabanı oluşturmak istediğiniz zaman uygulama için test kodu yazmak istiyorum. Ancak, bunu maviden pymysql ile denediğimde, bağlantı kurulamaz.

def setUp(self): 
    config = { 
     'user': 'test_user', 
     'passwd': 'test_passwd', 
     'host': 'localhost' 
    } 
    cnx = pymysql.connect(**config) 

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 61] Connection refused)") 

Etrafa Googling ve SQLite ve MySQLdb hakkında bazı şeyler bulunmuştur.

  1. sqlite3 veya MySQLdb hızla bellekte bir veritabanı oluşturmak için uygun mu: Ben şu soru var?
  2. Anaconda paketine MySQLdb'u nasıl yüklerim?
  3. setUp'da oluşturulan bir test veritabanı örneği var mı? Bu iyi bir fikir mi?

Bilgisayarımda yerel olarak çalışan bir MySQL sunucum yok.

+2

cevap kuyu * * yerel olarak çalışan bir mysql db almak olabilir. SQLite mysql için birçok farklılığa sahiptir, bu yüzden SQLite ile mysql değiştirmek için iyi bir test olmayacaktır. –

cevap

4

Her iki pymysql, MySQLdb ve sqlite, gerçek bir veritabanının da bağlanmasını isteyecektir. Sadece kodunuzu test etmek isterseniz, test etmek istediğiniz modülde pymysql modülünü kullanmalısınız ve test kodunuzda (test kodunuzda) kullanmalısınız: sahte kodlanmış sonuçları önceden tanımlanmış SQL ifadelerine döndürmek için sahte nesneyi ayarlayabilirsiniz. Python 2 için, https://docs.python.org/3/library/unittest.mock.html

Veya:)

de kütüphane alay yerli Python belgelerine kontrol https://pypi.python.org/pypi/mock

+2

O zaman istediğim şey mümkün değil gibi görünüyor. Amaç, kodun "gerçek" bir SQL veritabanında çalışıp çalışmadığını test etmek istediğimden, pymysql ile uğraşmak değildir. MySQL'in tüm özelliklerine sahip olup olmadığı önemli değil, ancak pymysql aracılığıyla iletilebilmelidir. Testleri gerçekleştirdiğim her makinede bir MySQL sunucusunu yerel olarak kurmak pratik değildir. – physicalattraction

+2

SQLite *, MySQL'e basitçe bağlanan pymysql ve MySQLdb'nin aksine "gerçek" bir veritabanıdır. – Air

+0

Ayrıca, "testleri çalıştırmak zorunda olduğunuz tüm makinelerde" bir MySQL'e sahip olmanız gerekmeyeceğini de unutmayın - hepsi tek bir makinede, tek bir makinede, bir bağlantı URL'si verilmiş – jsbueno