使用psycopg2在表中插入值

时间:2018-11-02 08:11:09

标签: python-3.x postgresql psycopg2

我正在尝试使用psycopg2和faker库在postgres SQL中的“虚拟”表中插入数据。这是我仅为学习目的而创建的表。它只有一列Student_name,其类型为char []。下面是我的Python脚本

import psycopg2
from faker import Faker
fake = Faker()

conn = psycopg2.connect(database="kreiotdb", user="****", password="*****", host="127.0.0.1", port="5432")
print("Connected Successfuly")
cur = conn.cursor()

for i in range (10):
    name = fake.name()
    cur.execute(""" INSERT INTO "Dummy" ("Student_name") VALUES (%s);""",[name])

运行脚本时,它给了我以下错误。连接成功

Fri Nov 02 12:16:07 gaurav ~ $ python3 /Users/gaurav/Desktop/populate.py 
Connected Successfuly
Traceback (most recent call last):
  File "/Users/gaurav/Desktop/populate.py", line 11, in <module>
    cur.execute(""" INSERT INTO "Dummy" ("Student_name") VALUES (%s);""",[name])
psycopg2.DataError: malformed array literal: "Brent Allison"
LINE 1:  INSERT INTO "Dummy" ("Student_name") VALUES ('Brent Allison...
                                                      ^
DETAIL:  Array value must start with "{" or dimension information.

为什么会给我这个错误,我该怎么办? 请帮忙。

1 个答案:

答案 0 :(得分:0)

import os
import csv
import sys
import psycopg2
import json
import csv
#import xlsxwriter
#import configparser
import psycopg2.extras
import psycopg2.extensions
#import logging
#import logging.config
import datetime
import zipfile
from subprocess import call

def db_connect():
    dbconn = None

    #if conf_section in config == False:
    #   print("Given section -> {0} is not exists in conf file.".format(conf_section))
    #  return None

    dbhost = ""
    dbport = ""
    dbname = ""
    dbuser = ""
    dbpass = ""

    try:
        dbconn = psycopg2.connect(host=dbhost, port=dbport, dbname=dbname, user=dbuser, password=dbpass)
        dbconn.autocommit = True
    except Exception as e:
        print(e)
        return None
    finally:
        return dbconn

    def execute_query(dbconn, query):
    nrows = cursor = None
    colnames = result = []

    try :
        cursor = dbconn.cursor(cursor_factory=psycopg2.extras.DictCursor)
        cursor.execute(query)
    except Exception as e:
        print(e)
        return (0, colnames, result)

    nrows = cursor.rowcount
    colnames = [desc[0] for desc in cursor.description]
    result = cursor.fetchall()
    #cursor.close()
    return (nrows)

def parse_csv(default_data):
    with open('key.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            tid=row['TID']
            mid=row ['MID']
            key=row ['Exported Key ']
            kcv=row ['KCV']
            serial_no=row['HarwardSerialNo']
            print ("TID="+tid+"  MID="+mid+" EXPORTED KEY="+key+" KCV="+kcv)
            request_data=default_data+key
            request_data.replace(" ", "")
            print (request_data)
            cmd="/home/siva/HSM_REQ/hsm_comms.out 192.168.5.51 4000"+request_data
            response_data=os.system(cmd)
            print (response_data)
            dbconn = db_connect()
            query="select * from hsm_keys where serial_no ='"+serial_no+"'";

            rows=execute_query(dbconn, query)
            print (rows)
            if (rows==0):
            query="INSERT ";
            print (query)

            return()

def main():
    header="0101303200"
    head_len="1D"
    fun_code="EE0200"
    fun_mod="00"
    key_len="05"
    key_spc="081002"
    key_index="0004"
    key_type="0500"
    len_of_key="10"
    default_data=header+head_len+fun_code+fun_mod+key_len+key_spc+key_index+key_type+len_of_key
    print (default_data)
    parse_csv(default_data)

if __name__ == '__main__':
    main()