2017-12-23 2 views
2

heroku에서 Postgres 데이터베이스에 데이터를 삽입하는 중 혼란 스럽습니다. 여기 Heroku 데이터베이스 : Insert operation

내가

print(cursor.statusmessage)

가 반환하여 SQL 상태를 확인하고

cursor = conn.cursor() 
cursor.execute("INSERT INTO users(username, useremail, userpass) VALUES ('"+_name+"','"+_email+"','"+_password+"')") 

나는 데이터베이스에 대한 연결을 만든

, 실행 후, 일이

INSERT 1

하지만, 실행 데이터에 0 =

cursor.fetchall() 그것은 나를/사용자/ABC/"

파일 오류가 발생

PycharmProjects/testSkillNetwork/app.py ", line 75, signUp data = cursor.fetchall().

ProgrammingError: no results to fetch 

그래서, 내가 이해 할 수없는 나는 왜 '는 결과가 없습니다'삽입에 성공.

도움이 될 것입니다. 감사.

답변

1

데이터베이스에서 데이터를 검색하려면 SELECT 쿼리를 실행해야합니다.

cursor.execute("SELECT * FROM users") 
cursor.fetchall() 

이 당신에게 어떤 결과를 제공한다.

또한 데이터 삽입이 완료되면 트랜잭션을 커밋해야합니다. 그렇지 않으면 데이터가 손실됩니다.사용 :

conn.commit() 

큰 문제는 쿼리를 작성하는 방식이 SQL 삽입에 취약하다는 것입니다. 데이터베이스 어댑터가 cursor.execute()에 전달 된 인수의 튜플의 값으로 장소 홀더 (%s를) 대체 할이 스타일로

cursor.execute("INSERT INTO users(username, useremail, userpass) VALUES (%s, %s, %s)", (_name,_email,_password)) 

: 오히려 문자열 연결을 사용하는 것보다 당신은 매개 변수화 쿼리를 사용해야합니다. 이 기능이 더 안전 할뿐만 아니라 읽고 유지하기가 훨씬 쉽습니다.

+0

conn.commit()가 데이터베이스에 값을 삽입하고 삽입했습니다. 실제로이 행이 있지만 fetchall() 이후에는 실행되지 않았습니다. 팁을 주셔서 감사합니다. 처음으로 나는 안드로이드 개발에서 벗어나는 그런 프로젝트를하고있다 ... – adafrwefsefr

1

가장 유명한 중 하나 인 psycopg2을 사용한다고 가정 할 때 어떤 드라이버를 사용하여 데이터베이스에 연결했는지 확실하지 않습니다. 관찰중인 것은 정상적인 동작입니다. here에서 읽기 :

A ProgrammingError is raised if the previous call to execute*() did not produce any result set or no call was issued yet. 

INSERT 문은 어떤 결과를 생성하지, 다른 그 실패의 경우에 오류가 발생했습니다. 방금 삽입 한 행을 가져 오려면 데이터베이스를 다시 쿼리하십시오.

cur.execute("SELECT * FROM users;") 
cur.fetchall() 

이렇게하면 행이 표시됩니다. 이 제외

, 당신이 읽을 경우 basic usage 및 매개 변수화 쿼리의 섹션 결코 사용 파이썬 문자열 연결이 SQL injection attacks에 취약하게하기 때문에, 쿼리를 실행.