def test_transaction(self): database.set_autocommit(False) with database.transaction() as t: User.create(name='jack', email='*****@*****.**') with database.transaction() as t: try: User.create(name='amy', id=1) except: t.rollback() database.set_autocommit(True) assert User.count() == 1
def create_data(self, count, table=None): database.set_autocommit(False) # lots of insert in a transaction with database.transaction(): if table is 1: # only create data in table `user` for i in range(1, count + 1): User.create(name='name' + str(i), email='email' + str(i)) elif table is 2: # only create data in table `post` for i in range(1, count + 1): Post.create(name='name' + str(i), user_id=count + 1 - i) else: # both, default for i in range(1, count + 1): User.create(name='name' + str(i), email='email' + str(i)) for i in range(1, count + 1): Post.create(name='name' + str(i), user_id=count + 1 - i) database.set_autocommit(True)
def test_a_lot_of_insert_in_transaction(self): database.set_autocommit(False) with database.transaction(): for i in range(1000): User.create(name=str(i), email=str(i)) database.set_autocommit(True)
db_type_mappings = { 'pymysql': 'mysql', 'MySQLdb': 'mysql', 'sqlite3': 'sqlite', } db_type = db_type_mappings[dbapi_name] user_sql = open('%s.user.sql' % db_type).read() post_sql = open('%s.post.sql' % db_type).read() database.set_dbapi(dbapi) logging.info('Using DBAPI %s' % dbapi_name) database.config(**configs) database.set_autocommit(True) class Test(object): def setUp(self): database.execute(user_sql) database.execute(post_sql) def tearDown(self): database.execute("drop table t_post") database.execute("drop table t_user") def create_data(self, count, table=None): database.set_autocommit(False) # lots of insert in a transaction