def sync_db(self, *model_modules): """同步数据库 eg: sync_db(model_1, model_2) """ self.create_keyspace_if_not_exist() if not self._is_connected: self.connect() # 同步所有 table model 和 usertype model table_models, user_type_models = [], [] for model_module in model_modules: _table_models, _user_type_models = get_models( model_module, self.keyspace) table_models.extend(_table_models) user_type_models.extend(_user_type_models) for model in user_type_models: management.sync_type(ks_name=self.keyspace, type_model=model) for model in table_models: management.sync_table(model) management.execute(""" CREATE CUSTOM INDEX idx_nickname ON profile(nickname) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'CONTAINS' } """) management.execute(""" CREATE CUSTOM INDEX idx_role_id ON profile(role_id) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = { 'mode': 'CONTAINS' } """)
def test_can_create_same_udt_different_keyspaces(self): class User(UserType): age = columns.Integer() name = columns.Text() sync_type("cqlengine_test", User) create_keyspace_simple("simplex", 1) sync_type("simplex", User) drop_keyspace("simplex")
def sync_tables(): """Sync all models to tables. """ sync_table(ShoppingList) sync_table(User) sync_table(Category) sync_table(Feed) sync_table(News) sync_table(Photo) sync_table(Profile) sync_table(Video) sync_type(FeedPhoto) sync_type(NewsPhoto)
def main(): # create a keyspace "test" connection.setup(['140.121.101.164'], "weather1") management.create_keyspace_simple('weather1', 3) # connect to test keyspace connection.setup(['140.121.101.164'], "weather1", protocol_version=3) management.sync_type('test', Air) management.sync_type('test', Sun) management.sync_type('test', Rain) management.sync_type('test', Basic) management.sync_type('test', Value) management.sync_table(Weather)
def init_db(models=None, types=None): """ To sync the models to the database. *Note: synchronizing models causes schema changes, and should be done with caution. Please see the discussion in cassandra.cqlengine.management - Schema management for cqlengine for considerations. """ get_db() if models: for model in models: sync_table(model) if types: ks = current_app.config.get('DATABASE_KEYSPACE', 'dev') for t in types: sync_type(ks, t)
def sync_db(self, *model_modules): """同步数据库 eg: sync_db(model_1, model_2) """ self.create_keyspace_if_not_exist() if not self._is_connected: self.connect() # 同步所有 table model 和 usertype model table_models, user_type_models = [], [] for model_module in model_modules: _table_models, _user_type_models = get_models( model_module, self.keyspace) table_models.extend(_table_models) user_type_models.extend(_user_type_models) for model in user_type_models: management.sync_type(ks_name=self.keyspace, type_model=model) for model in table_models: management.sync_table(model)
def test_can_create_udts(self): class User(UserType): age = columns.Integer() name = columns.Text() sync_type("cqlengine_test", User) user = User(age=42, name="John") self.assertEqual(42, user.age) self.assertEqual("John", user.name) # Add a field class User(UserType): age = columns.Integer() name = columns.Text() gender = columns.Text() sync_type("cqlengine_test", User) user = User(age=42, name="John", gender="male") self.assertEqual(42, user.age) self.assertEqual("John", user.name) self.assertEqual("male", user.gender) # Remove a field class User(UserType): age = columns.Integer() name = columns.Text() sync_type("cqlengine_test", User) user = User(age=42, name="John", gender="male") with self.assertRaises(AttributeError): user.gender
def test_sync_warnings(self): """ Test to insure when inconsistent changes are made to a table, or type as part of a sync call that the proper logging messages are surfaced @since 3.2 @jira_ticket PYTHON-260 @expected_result warnings are logged @test_category object_mapper """ mock_handler = MockLoggingHandler() logger = logging.getLogger(management.__name__) logger.addHandler(mock_handler) sync_table(BaseInconsistent) sync_table(ChangedInconsistent) self.assertTrue('differing from the model type' in mock_handler.messages.get('warning')[0]) if CASSANDRA_VERSION >= '2.1': sync_type(DEFAULT_KEYSPACE, BaseInconsistentType) mock_handler.reset() sync_type(DEFAULT_KEYSPACE, ChangedInconsistentType) self.assertTrue('differing from the model user type' in mock_handler.messages.get('warning')[0]) logger.removeHandler(mock_handler)
def test_sync_warnings(self): """ Test to insure when inconsistent changes are made to a table, or type as part of a sync call that the proper logging messages are surfaced @since 3.2 @jira_ticket PYTHON-260 @expected_result warnings are logged @test_category object_mapper """ mock_handler = MockLoggingHandler() logger = logging.getLogger(management.__name__) logger.addHandler(mock_handler) sync_table(BaseInconsistent) sync_table(ChangedInconsistent) self.assertTrue('differing from the model type' in mock_handler.messages.get('warning')[0]) if CASSANDRA_VERSION >= Version('2.1'): sync_type(DEFAULT_KEYSPACE, BaseInconsistentType) mock_handler.reset() sync_type(DEFAULT_KEYSPACE, ChangedInconsistentType) self.assertTrue('differing from the model user type' in mock_handler.messages.get('warning')[0]) logger.removeHandler(mock_handler)
def test_can_create_same_udt_different_keyspaces(self): sync_type(DEFAULT_KEYSPACE, User) create_keyspace_simple("simplex", 1) sync_type("simplex", User) drop_keyspace("simplex")
from cassandra.cqlengine.management import sync_table, sync_type from se2 import config from se2.infras.models import * ks_name = config.get("cassandra", "session_keyspace") sync_type(ks_name, UserOrderExecutionModel) sync_type(ks_name, CurrentPriceModel) sync_type(ks_name, PriceChangeModel) sync_type(ks_name, DataRecordModel) sync_table(AccountModel) sync_table(TimeSeriesModel) sync_table(TimeSeriesDataModel) sync_table(UserOrderModel)
import os os.environ[ 'config.dir'] = "/Users/zhangzheng/Quantitative/stratege_engine/interface3" from se.infras.models import * from cassandra.cqlengine.management import sync_table, sync_type from se import config ks_name = config.get("cassandra", "session_keyspace") sync_type(ks_name, UserOrderExecutionModel) sync_type(ks_name, UserOrderModel) sync_type(ks_name, DataRecordModel) sync_table(AccountModel) sync_table(TimeSeriesModel) sync_table(TimeSeriesDataModel)