django分表的细节问题 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

django分表的细节问题

蛮大人123 2016-02-12 16:41:04 2476

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

SQL 关系型数据库 MySQL 数据库 索引 Python
分享到
取消 提交回答
全部回答(1)
  • 被纵养的懒猫
    2019-10-10 18:05:20

    如果你觉着使用自带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})

    答案来源于网络

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程