2017-10-20 1 views
1

내 유스 케이스는 포스트그레스 데이터베이스에 임시 테이블을 작성하고 거기에서 레코드를 가져 와서 다른 테이블에 삽입하는 것입니다.파이썬 코드가 데이터베이스에 테이블을 만들지 못했지만 결과를 쿼리 할 수 ​​있습니다. postgres

내가 사용하는 코드는 다음과 같습니다

import psycopg2 
import sys 
import pprint 

from __future__ import print_function 
from os.path import join,dirname,abspath 
import xlrd 
import os.path 

newlist = [] 
itemidlist = [] 

def main(): 

    conn_string = "host='prod-dump.cvv9i14mrv4k.us-east-1.rds.amazonaws.com' dbname='ebdb' user='ebroot' password='*********'" 
    # print the connection string we will use to connect 
    # print "Connecting to database" % (conn_string) 

    # get a connection, if a connect cannot be made an exception will be raised here 
    conn = psycopg2.connect(conn_string) 

    # conn.cursor will return a cursor object, you can use this cursor to perform queries 
    cursor = conn.cursor() 

    dealer_id = input("Please enter dealer_id: ") 
    group_id = input("Please enter group_id: ") 

    scriptpath = os.path.dirname('__file__') 
    filename = os.path.join(scriptpath, 'Winco - Gusti.xlsx') 

    xl_workbook = xlrd.open_workbook(filename, "rb") 

    xl_sheet = xl_workbook.sheet_by_index(0) 
    print('Sheet Name: %s' % xl_sheet.name) 

    row=xl_sheet.row(0) 

    from xlrd.sheet import ctype_text 

    print('(Column #) type:value') 
    for idx, cell_obj in enumerate(row): 
     cell_type_str = ctype_text.get(cell_obj.ctype, 'unknown type') 
     #print('(%s) %s %s' % (idx, cell_type_str, cell_obj.value)) 

    num_cols = xl_sheet.ncols 

    for row_idx in range(0, xl_sheet.nrows): # Iterate through rows 
     num_cols = xl_sheet.ncols 

     id_obj = xl_sheet.cell(row_idx, 1) # Get cell object by row, col 
     itemid = id_obj.value 
     #if itemid not in itemidlist: 
     itemidlist.append(itemid) 

     # execute our Query 
     ''' 
     cursor.execute(""" 
     if not exists(SELECT 1 FROM model_enable AS c WHERE c.name = %s); 
     BEGIN; 
      INSERT INTO model_enable (name) VALUES (%s) 
     END; 
     """ %(itemid,itemid)) 
     '''  
    cursor.execute("drop table temp_mbp1") 

    try: 
     cursor.execute("SELECT p.model_no, pc.id as PCid, g.id AS GROUPid into public.temp_mbp1 FROM products p, \ 
     model_enable me, products_clients pc, groups g WHERE p.model_no = me.name \ 
     and p.id = pc.product_id and pc.client_id = %s and pc.client_id = g.client_id and g.id = %s"\ 
     % (dealer_id,group_id) 

    except (Exception, psycopg2.DatabaseError) as error: 
     print(error) 

    cursor.execute("select count(*) from public.temp_mbp1") 
    # retrieve the records from the database 
    records = cursor.fetchall() 

    # print out the records using pretty print 
    # note that the NAMES of the columns are not shown, instead just indexes. 
    # for most people this isn't very useful so we'll show you how to return 
    # columns as a dictionary (hash) in the next example. 
    pprint.pprint(records) 

if __name__ == "__main__": 
     main() 

프로그램이 오류를 던지는 것이 아니라, 내가 데이터 관리자에서 보는 바와 같이 테이블이 포스트 그레스 데이터베이스에 만들어지고되지 않는 사이에 블록을 제외한 시도.

Please enter dealer_id: 90 
Please enter group_id: 13 
Sheet Name: Winco Full 8_15_17 
(Column #) type:value 
[(3263,)] 

감사합니다, 산토

+0

pprint (레코드) 문에 아무 것도 표시됩니까? – chasmani

+0

예. 그것은 출력을 보여줍니다. – lifeofpy

답변

2

당신은 변경 사항을 적용하지 않았다, 그래서 그들은 데이터베이스에 저장되지 않습니다

표시된 출력됩니다. pprint 문의 바로 아래에 아래쪽에 추가하십시오.

conn.commit() 
관련 문제