0
我有我使用的Django WebTest的針對內存數據庫運行WebTest的。Django的測試MySQLdb的在單元測試/ WebTest的
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
}
}
有一段代碼,我不能通過ORM運行,它的運行速度比直SQL快5倍。是的,我熟悉select_related,batch_select和prefetch_related。這是我的視圖中執行我的SQL代碼的方式。
db = MySQLdb.connect(host=settings.DATABASES['default']['HOST'],
user=settings.DATABASES['default']['USER'],
passwd=settings.DATABASES['default']['PASSWORD'],
db=settings.DATABASES['default']['NAME'])
cursor = db.cursor(MySQLdb.cursors.DictCursor)
cursor.execute("SELECT something FROM sometable WHERE somecondition = 'somevariable';")
count_queryset = cursor.fetchall()
cursor.close()
db.close()
當我的測試腳本得到在考慮到這一點它悶死了出來,出現以下錯誤:
File "/srv/reports/views.py", line 473, in my_view
db=settings.DATABASES['default']['NAME'])
File "build/bdist.macosx-10.8-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect
return Connection(*args, **kwargs)
File "build/bdist.macosx-10.8-x86_64/egg/MySQLdb/connections.py", line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (1049, "Unknown database ':memory:'")
我不知道爲什麼在內存中的sqlite3數據庫中很好地工作過,但ORM不是當我使用MySQLdb時。如果我通過unittest.TestCase運行代碼,也會發生同樣的情況。有任何想法嗎?
一般來說,它不是用於生產,開發和測試不同的數據庫後端是一個好主意。你正試圖在sqlite3中使用'MySQLdb' - 難怪它不起作用。 – alecxe
Doh。嘿,這是星期一吧? – scoopseven