2017-12-09 4 views
0

내 파이썬 3.6 스크립트 실행 및 시도이 그것을 반환 같은 psycopg2를 사용하여 행을 추가 할 때파이썬 3.6 SQL 데이터베이스 연결

CREATE TABLE public.coinbase_btc_usd 
(
    id bigserial primary key, 
    price integer NOT NULL, 
    buy integer NOT NULL, 
    sell integer NOT NULL, 
    "timestamp" timestamp with time zone 
) 

에서 만든 테이블과 내 PostgreSQL 데이터베이스에 행을 삽입하려고 "가져올 결과가 없습니다"라는 오류와 내 DB에 아무 것도 추가되지 않습니다.

 sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp)" \ 
       " VALUES (" + exchange_rate + ', ' + buy_rate + ', ' + sell_rate + ", \'2015-10-10 06:44:33.8672177\')" 

    print(sql_query) 

    cur.execute(sql_query) 

또한 실행하려고지고 정확히 알기 위해 sql_query 변수를 인쇄이는 출력에

INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp) VALUES (16392.10, 16563.40, 16235.42, '2015-10-10 06:44:33.8672177') 
+1

, 코드는 SQL 주입에 따라, 당신이 나의이었다 –

+0

을 값을 넣어 문자열 연결을 사용하지 않아야 질문 남자 ... 이것은 모든 백엔드이고 그것을 사용하는 유일한 인스턴트 메신저 그래서 나는 내 자신을 주사하고 싶지 않아. 나는이 마지막 줄을 데이터베이스에 삽입 할 수없는 이유를 알아 내려고 노력하고있다. 콘솔에 printf를 붙여 넣은 것은 pgadmin으로 붙여 넣기 만하면된다. – user1771791

+1

나는 방금 많은 예제가있다. 당신이하는 일을하지 않는 문서에서, 그래서 그들을 따르지 않는 이유는 무엇입니까? http://initd.org/psycopg/docs/sql.html –

답변

0

변화를 인쇄 한

sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp)" \ 
      " VALUES (" + exchange_rate + ', ' + buy_rate + ', ' + sell_rate + ", \'2015-10-10 06:44:33.8672177\')" 

에 :

sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp)" \ 
      " VALUES (" + exchange_rate + ', ' + buy_rate + ', ' + sell_rate + ", \'2015-10-10 06:44:33.8672177\') returning *" 

이 가정은 내 가정에서 no results to fetch을 수정해야합니다.

행이 추가되지 않은 것으로 나타나면 대부분 begin 트랜잭션 일 것이고 커밋하지 않을 것입니다.

cur.execute(sql_query) 
conn.commit() 

또는 자동을 활성화 할 수 있습니다 실행 후 즉시 각 쿼리를 커밋 커밋 :

0

것은 당신이 트랜잭션 커밋되어 있는지 확인 또한

conn.autocommit = True 

를, 그것은 SQL 주입을 방지하기 위해 아무것도 비용이 없습니다 공격 - 매개 변수가있는 쿼리 만 사용하십시오. 사실 코드가 실제로있을 것이다 청소기뿐만 아니라 안전 :

그런데
sql_query = "INSERT INTO coinbase_btc_usd(price, buy, sell, timestamp) VALUES (%s, %s, %s, %s)" 
cur.execute(sql_query, (exchange_rate, buy_rate, sell_rate, timestamp)) 
conn.commit()