コード例 #1
0
class TestInsertOnDuplicate(unittest.TestCase):

    def setUp(self):
        monkeypatchTableClause()
        engine = create_engine('mysql+mysqldb://duplicate@localhost/duplicate_test', 
                               paramstyle='pyformat')
        self.conn = engine.connect()
        meta = MetaData(engine)
        self.table = Table('users', meta,
            Column('id', Integer, unique=True),
            Column('name', String(25)))
        self.table.create()

    def tearDown(self):
        self.table.drop()
        self.table = None
        self.conn = None
        unmonkeypatchTableClause()

    def testInsert(self):
        self.insertFetchAssert(42, 'Avery')
        self.insertFetchAssert(42, 'Sophie')

    def insertFetchAssert(self, id, name):
        ins = self.table.insertOnDuplicate().\
                           values(id=id, name=name)
        self.conn.execute(ins)
        self.assertEqual(self.fetchName(id), name)

    def fetchName(self, id):
        c = self.table.c
        sel = select([c.name]).\
                where(c.id==id).\
                limit(1)
        return self.conn.execute(sel).scalar()