存档一些具有继承的实体

时间:2017-05-28 09:20:45

标签: php mysql symfony doctrine-orm

我有一个难以解决的问题,我不知道该怎么做。

我想存档一些实体,然后从初始表中删除它们。问题是这些实体是连在一起的。我有一个接近工作的代码,但我认为这不是一个干净的方法。它由SQL查询组成,这些查询将带有ID的行复制到新表中。 另一个问题是我不需要存档某些字段,因此存档实体与初始实体不完全相同。 我使用原始SQL查询而不是DQL,因为我的表的大小。

我想归档这些实体:Colle,ColleQC,QC,PasserColle,Reponse,ReponseQC,StatistiqueColle,StatistiqueQuestion,RepartitionColle,RepartitionQuestion,Tuteur 至 BanqueColle,BanqueColleQC,BanqueQC,BanquePasserColle,BanqueReponse,BanqueReponseQC,BanqueStatistiqueColle,BanqueStatistiqueQuestion,BanqueRepartitionColle,BanqueRepartitionQuestion,AncienAdherent。

我会将这些存档用于我应用的另一部分。

表格结构示例: enter image description here

(Tuteur和AncienAdherent扩展用户)

这是我存档的代码的一部分,但我认为这不是一个干净的方法:

#!/usr/bin/python
# coding:utf-8

import evernote.edam.type.ttypes as Types
import evernote.edam.error.ttypes as Errors
from evernote.api.client import EvernoteClient
import os

def parse_query_string(authorize_url):
    uargs = authorize_url.split('?')
    #vals = authorize_url.split('?')
    vals = {}
    if len(uargs) == 1:
        raise Exception('Invalid Authorization URL')
    for pair in uargs[1].split('&'):
        key, value = pair.split('=', 1)
        vals[key] = value
    return vals

CUNSUMER_KEY = 'MY_CUNSUMER_KEY'
CUNSUMER_SECRET = 'MY_CUNSUMER_SECRET'

client = EvernoteClient(
        consumer_key= CUNSUMER_KEY,
        consumer_secret= CUNSUMER_SECRET,
        #sandbox=True
        sandbox=False
    )

url = ""

if os.environ.has_key('HTTP_HOST') and os.environ.has_key('REQUEST_URI'):
    url = "http://" + os.environ['HTTP_HOST'] + os.environ['REQUEST_URI']

vals = parse_query_string(url)

request_token = client.get_request_token(url)

access_token = client.get_access_token(request_token['oauth_token'],request_token['oauth_token_secret'],vals['oauth_verifier'])

print 'Content-type: text/html\n'
print """
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>vals</h1>
        <p>After the "?" Of the current URL</p>
        <p>%s</p>
        <h1>vals['oauth_verifier']</h1>
        <p>%s</p>
        <h1>request_token</h1>
        <p>%s</p>
        <h1>request_token['oauth_token']</h1>
        <p>%s</p>
        <h1>request_token['oauth_token_secret']</h1>
        <p>%s</p>
    </body>
</html>
"""%(vals, vals['oauth_verifier'], request_token, request_token['oauth_token'], request_token['oauth_token_secret'])

1 个答案:

答案 0 :(得分:0)

我最近一直在进行数据库迁移,并且发现最简单的方法(对我来说)就是在SQL中做所有事情。这有点费力,但它对我的项目来说还算可行

首先删除所有约束

# Table1.field1
ALTER TABLE Table1 DROP FOREIGN KEY FK_Table1_field1;
ALTER TABLE Table1 DROP INDEX IDX_Table1_field1;

# Table1.field2
ALTER TABLE Table1 DROP FOREIGN KEY FK_Table1_field2;
ALTER TABLE Table1 DROP INDEX IDX_Table1_field2;

然后添加所有SQL以将数据移动到新表中。

然后删除所有旧表

DROP TABLE IF EXISTS Table1;
DROP TABLE IF EXISTS Table2;

然后在

中添加所有约束
ALTER TABLE Table1 
    ADD INDEX IDX_Table1_field1 (field1 ASC);
ALTER TABLE Table1
    ADD CONSTRAINT FK_Table1_field1
    FOREIGN KEY (field1)
    REFERENCES OtherTable (xxxx)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

我在其自己的sql文件中保留了每一步,因此对于此示例,将有4个sql文件,如果将数据移动步骤拆分为多个文件,则可能更容易管理。 / p>