用Python模拟MySQL数据库

时间:2015-02-10 12:15:50

标签: python mysql sqlite mysql-python pymysql

我使用Anaconda发行版的Python 3.4。在这个发行版中,我发现pymysql库连接到现有的MySQL数据库,该数据库位于另一台计算机上。

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

我现在想为我的应用程序编写测试代码,我希望在每个测试用例的setUp创建一个非常小的数据库,最好是在内存中。但是,当我使用pymysql突然尝试此操作时,它无法建立连接。

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

我一直在谷歌上搜索,发现了SQLiteMySQLdb的一些内容。我有以下问题:

  1. sqlite3MySQLdb是否适合在内存中快速创建数据库?
  2. 如何在Anaconda包中安装MySQLdb
  3. 是否有一个在setUp中创建的测试数据库示例?这甚至是个好主意吗?
  4. 我的计算机上没有本地运行的MySQL服务器。

2 个答案:

答案 0 :(得分:6)

pymysql,MySQLdb和sqlite都需要一个真正的数据库连接。 如果你只是想测试你的代码,你应该只模拟你要测试的模块上的pymysql模块,并相应地使用它 (在您的测试代码中:您可以设置模拟对象以将硬编码结果返回到预定义的SQL语句)

检查本机Python模拟库的文档: https://docs.python.org/3/library/unittest.mock.html

或者,对于Python 2: https://pypi.python.org/pypi/mock

答案 1 :(得分:0)

您可以使用testing.mysqldDisplayTitles)来模拟mysql数据库

由于某些noisy error logs that crop up,我在测试时喜欢此设置:

pip install testing.mysqld