ฉันกำลังพยายามเปลี่ยนจาก Windows เป็น Ubuntu (ใช้ 12.04 LTS) และกำลังพยายามใช้สคริปต์เก่าบางส่วนเพื่อเรียกใช้ฐานข้อมูลเก่าของฉัน ก่อนหน้านี้ฉันใช้ postgresql และ psycopg2 เพื่อรักษามัน และฉันกำลังพยายามทำอีกครั้งที่นี่
ข้อผิดพลาดของฉันคือการนำเข้าไฟล์ CSV ไปยังตารางโดยใช้คำสั่ง Copy Expert
รหัสมีดังนี้:
#!/usr/bin/env python
import psycopg2 as psy
import sys
conn = psy.connect("dbname, user, host, password") # with the appropriate values
curs = conn.cursor()
table = 'tablename' # a table with the appropriate columns etc
file = 'filename' # a csv file
SQL = "COPY %s FROM '%s' WITH CSV HEADERS" % (tablename, filename)
curs.copy_expert(SQL, sys.stdin) # Error occurs here
conn.commit()
curs.close()
conn.close()
ข้อผิดพลาดเฉพาะที่เกิดขึ้นมีดังนี้:
psycopg2.ProgrammingError: ไม่สามารถเปิดไฟล์ "ชื่อไฟล์" เพื่ออ่านได้: การอนุญาตถูกปฏิเสธ
ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก:
ฉันติดอยู่อย่างสมบูรณ์และเชื่อว่าเป็นเพราะความแปลกบางประการในการตั้งค่าฐานข้อมูลหรือไฟล์
การเพิ่มคำสั่งอ่านและพิมพ์อย่างง่ายโดยใช้โมดูล csv ก็ทำงานได้ดีเช่นกัน (จากสคริปต์เดียวกันในความเป็นจริง) มันจะส่งออกข้อมูลทั้งหมดจากไฟล์ csv จากนั้นเกิดข้อผิดพลาดโดยสิทธิ์ถูกปฏิเสธเมื่อพยายามนำเข้าไปยังฐานข้อมูล
import csv
f = open(filename, 'rb')
read = csv.reader(f, delimiter =',')
for row in read:
print row
f.close()
su
เนื่องจากระบบการอนุญาตแตกต่างกันระหว่าง Ubuntu และ windows คุณมักจะจำเป็นต้องรันคำสั่งโดยใช้sudo
เว้นแต่คุณจะเป็นผู้ใช้รูท - person EdChum   schedule 08.04.2012su
หรือsudo
แต่ดูเหมือนว่าจะใช้ไม่ได้เช่นกัน จะเกิดอะไรขึ้นหากคุณคัดลอกไฟล์ csv ไปยังเดสก์ท็อปหรือตำแหน่งอื่นที่คุณรู้แน่นอนว่าคุณมีสิทธิ์เต็มที่ในการทำสิ่งที่คุณต้องการกับไฟล์นั้น นอกจากนี้เส้นทางไปยังชื่อไฟล์คืออะไร อาจเป็นไปได้ว่าเส้นทางนั้นเข้ากันไม่ได้กับแบบแผน * nix เช่น เครื่องหมายทับ/
แทนที่จะเป็น `\` แต่โดยปกติแล้ว python จะดูแลเรื่องนี้ - person EdChum   schedule 09.04.2012