Ir para conteúdo
Fórum Script Brasil
  • 0

Python MySQL + FTP


mendes.frost

Pergunta

Ola eu estou fazendo um trabalho para a materia de banco de dados da faculdade em que eu tenho que fazer um site tipo esse guifonseca.floripa.com.br/cgi-bin/filmes.cgi

O professor passou um script em Python para não ter que comecar do zero , que é esse abaixo

import sqlite3
import os
import hashlib
from shutil import copyfile

db_file = r'C:\ProgramData\Team MediaPortal\MediaPortal\database\movingpictures.db3'
#LIMIT = 'LIMIT 2'
LIMIT = ''

def get_movies():

    if not os.path.isfile(db_file):

        return

    file = open('listafilmes.txt', 'w')

    file.write('DELETE FROM filmes;\n')

    conn = sqlite3.connect(db_file)

    query = conn.cursor()

    query.execute("SELECT distinct title,directors,actors,year,genres,score,details_url,videoresolution,videoaspectratio,hassubtitles,coverthumbfullpath,summary FROM movie_info as mi, local_media__movie_info as lmmi, local_media as lm WHERE mi.id=lmmi.movie_info_id AND lmmi.local_media_id=lm.id ORDER BY title %s" % LIMIT)

    for movie in query:

        file.write('INSERT INTO filmes VALUES (\'\',')

        for i in range(12):

            # -- imprime o nome do filme no shell para conferencia

            if i == 0:

                print movie[0]
            # -- diferencia os campos por tipo para impressao

            if i == 3 or i == 5 or i == 9:

                file.write("'%s" % repr(movie[i]))  # -- campos numericos (ou não texto)

            elif i == 10:   # -- campo com o path completo da imagem da capa

                coverpath, cover = os.path.split(movie[i])

                file.write("'"+escape(cover.encode('utf-8')))   # -- pega apenas o nome do arquivo, sem o path

            else:

                file.write("'"+escape(movie[i].encode('utf-8')))    # -- outros capos de texto convertidos para utf-8



            # -- se for o ultimo campo, não imprimir a virgula

            if i < 11:

                file.write("',")

            else:

                file.write("');\n")

    conn.close()

# -- escape: escapa os caracteres ' e "

def escape(string):

    string = str(string).replace(r"'", r"\'").replace(r'"',r'\"')

    return string

if __name__ == '__main__':

    print('get_movies ==> start')

    get_movies()

    print('get_movies ==> end')
ele pediu para alterar esse script para q ele não gere esse dump , mas sim 'fale' direto com o MySQl e que também envie as capas dos filmes direto pro servidor, eu não manjo nada de python , mas procurando na internet eu achei algumas informaçoes , instalei ele la em casa e tentei modificar o codigo, mas ele não roda de jeito nenhum. o que eu queria saber era se alguém pode dar uma olhada no meu codigo e falar onde eu estou errando , o meu codigo é esse
import ftplib
import MySQLdb            
import sqlite3
import os
import hashlib
from shutil import copyfile

db_file = r'C:\ProgramData\Team MediaPortal\MediaPortal\database\movingpictures.db3'

#LIMIT = 'LIMIT 2'
LIMIT = ''

def send_covers():
    try:
        dbConnection = MySQLdb.connect("localhost", "root", "")
    except:
        print "Erro ao conectar ao banco de dados"
        exit()
    dbConnection.select_db("movies")
    dbCursor = dbConnection.cursor()
    dbCursor.execute("SELECT cover FROM movies")
    s = ftplib.FTP('myserver.com','login','password') # Connect
    for linha in dbCursor:
    f = open(linha[0],'rb')                # file to send
        s.storbinary('STOR '+linha[0], f)         # Send the file
    f.close()                                # Close file and FTP
    s.quit()

def get_movies():
    if not os.path.isfile(db_file):
        return
    file = open('listafilmes.txt', 'w')
    file.write('DELETE FROM filmes;\n')
    conn = sqlite3.connect(db_file)
    query = conn.cursor()
    try:
        dbConnection = MySQLdb.connect("localhost", "root", "")
    except:
        print "Erro ao conectar ao banco de dados"
        exit()
    dbConnection.select_db("pythondb")
    dbCursor = dbConnection.cursor()
    query.execute("SELECT distinct title,directors,actors,year,genres,score,details_url,videoresolution,videoaspectratio,hassubtitles,coverthumbfullpath,summary FROM movie_info as mi, local_media__movie_info as lmmi, local_media as lm WHERE mi.id=lmmi.movie_info_id AND lmmi.local_media_id=lm.id ORDER BY title %s" % LIMIT)

    for movie in query:

        insert = 'INSERT INTO filmes VALUES (\'\','

        for i in range(12):

            # -- imprime o nome do filme no shell para conferencia

            if i == 0:

                print movie[0]



            # -- diferencia os campos por tipo para impressao

            if i == 3 or i == 5 or i == 9:

                insert += "'%s" % repr(movie[i])  # -- campos numericos (ou não texto)

            elif i == 10:   # -- campo com o path completo da imagem da capa

                coverpath, cover = os.path.split(movie[i])

                insert += "'"+escape(cover.encode('utf-8'))   # -- pega apenas o nome do arquivo, sem o path

            else:

                insert += "'"+escape(movie[i].encode('utf-8'))    # -- outros capos de texto convertidos para utf-8
            # -- se for o ultimo campo, não imprimir a virgula

            if i < 11:

                insert += "',"

            else:

                insert += "');\n"
        dbCursor.execute(insert)
         dbConnection.commit()    

    conn.close()

# -- escape: escapa os caracteres ' e "
def escape(string):

    string = str(string).replace(r"'", r"\'").replace(r'"',r'\"')

    return string

if __name__ == '__main__':

    print('get_movies ==> start')

    get_movies()

    print('get_movies ==> end')
    send_covers()

obrigado

e desculpa pelo tamanho do post , eu tentei usar spoiler mas ficava dando erro . quando eu colocava a partir do menu aparecia um pop up com erro 404 e quando eu coloquei na mao ele ignorou =p

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...