Skip to content

Instantly share code, notes, and snippets.

@kylefelipe
Created December 21, 2017 15:05
Show Gist options
  • Save kylefelipe/f2d1cdfc465792d19da88b6fb3d6aa9f to your computer and use it in GitHub Desktop.
Save kylefelipe/f2d1cdfc465792d19da88b6fb3d6aa9f to your computer and use it in GitHub Desktop.
gera sql genérico de insert de dados de uma tabela em outra
def sql_insert(tab_origem, tab_destino):
"""Gera um SQL de insert no BD genérico, tem de definir a conexão com o BD
A ordem das colunas de destino devem estar na mesma ordem da coluna de origem"""
cur = conn.cursor()
# Caso vá buscar dados de uma tabela e inserir em outra essa variável deverá receber o nome da tabela
tab_origem = ""
# Pegando as colunas da tabela origem
origem = cur.execute("PRAGMA table_info({0});".format(tab_origem))
# Pegando as colunas da tabela origem
pragma_origem = [i[1] for i in origem]
# Pegando as colunas da tabela de destino
destino = cur.execute("PRAGMA table_info({0});".format(tab_destino))
# Pegando as colunas da tabela de destino
# O i[1] faz com que o código pegue apenas os nomes das colunas que retorna no PRAGMA do DESTINO
pragma_destino = [i[1] for i in destino]
# Montando a linha do SQL com o nome das colunas de destino no padrão COLUNA1, COLUNA2, COLUNAN......
# pragma_destino[1:] faz com que o codigo pule a primeira coluna, caso queira inserir ela, basta remover o [1:]
colunas_destino = ", ".join(pragma_destino[1:])
# Pega a quantidade de colunas a serem inseridas na tabela de destino
qt_colunas = len(pragma_destino)
# Pegando as colunas da planilha origem
# Montando a linha do SQL com o nome das colunas de destino no padrão COLUNA1, COLUNA2, COLUNAN......
# pragma_origem[1:] faz com que o codigo pule a primeira coluna, caso queira inserir ela, basta remover o [1:]
colunas_origem = ", ".join(pragma_origem[1:qt_colunas])
# Montando o SQL de inserção dos dados na tabela de destino
print "Inserindo os dados da tabela virtual {tab_origem} na tabela {tab_destino}.".format(tab_origem=tab_origem,
tab_destino=tab_destino)
sql = """
INSERT INTO {tabela_destino}({colunas_destino})
SELECT {colunas_origem}
FROM {tab_origem};
""".format(tabela_destino=tab_destino, colunas_destino=colunas_destino,
colunas_origem=colunas_origem, tab_virtual=tab_origem)
cur.execute(sql)
conn.commit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment