系统是用 Django + MySQL 开发的
对已有数据的数据库进行分表,为了不迁移数据库。
采用的是增量分表:
主键 1 ~ 50W 为 table
主键 50W + 1 ~ 100W 为 table2
现在有问题是 table2 的创建是在 Django 里面用纯SQL创建吗?
比如:
分表之后,table表的索引变化如何同步到 其他水平分出来的表?
比如已经分出 二三十 张表了,原始表的索引或者字段稍有变化,自然需要同步过去,什么方案同步比较好?
如果你觉着使用自带ORM查询费劲的话。直接获取数据库连接,然后执行sql语句。 def my_custom_sql(): from django.db import connection, transaction cursor = connection.cursor() # 数据修改操作——提交要求 cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz]) transaction.commit_unless_managed() # 数据检索操作,不需要提交 cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz]) row = cursor.fetchone() return row 多数据 from django.db import connectionscursor = connections['my_db_alias'].cursor()# Your code here...transaction.commit_unless_managed(using='my_db_alias') 通常我们不需要手动调用 transaction.commit_unless_managed( ),我们可以这样做: @commit_on_successdef my_custom_sql_view(request, value): from django.db import connection, transaction cursor = connection.cursor() # Data modifying operation cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [value]) # Since we modified data, mark the transaction as dirty transaction.set_dirty() # Data retrieval operation. This doesn't dirty the transaction, # so no call to set_dirty() is required. cursor.execute("SELECT foo FROM bar WHERE baz = %s", [value]) row = cursor.fetchone() return render_to_response('template.html', {'row': row})
答案来源于网络
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。