开发者社区> 问答> 正文

django分表的细节问题

系统是用 Django + MySQL 开发的
对已有数据的数据库进行分表,为了不迁移数据库。
采用的是增量分表:
主键 1 ~ 50W 为 table
主键 50W + 1 ~ 100W 为 table2
现在有问题是 table2 的创建是在 Django 里面用纯SQL创建吗?
比如:
screenshot
分表之后,table表的索引变化如何同步到 其他水平分出来的表?
比如已经分出 二三十 张表了,原始表的索引或者字段稍有变化,自然需要同步过去,什么方案同步比较好?

展开
收起
蛮大人123 2016-02-12 16:41:04 3666 0
1 条回答
写回答
取消 提交回答
  • 如果你觉着使用自带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})

    答案来源于网络

    2019-10-10 18:05:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载