홈>
그냥
PostgreSQL
와 프로젝트를 시작했다
. Excel에서 데이터베이스로 도약하고 싶습니다. 생성하고 삽입해야합니다. 일단 이것을 실행하면 업데이트로 전환해야하므로 현재 데이터를 계속 덮어 쓰지 않습니다. 연결이 작동하는 것을 알고 있지만 다음과 같은 오류가 발생합니다.
내 오류는 :
TypeError: not all arguments converted during string formatting
#!/usr/bin/env python
import requests
import psycopg2
conn = psycopg2.connect(database='NHL', user='postgres', password='postgres', host='localhost', port='5432')
req = requests.get('http://www.nhl.com/stats/rest/skaters?isAggregate=false&reportType=basic&isGame=false&reportName=skatersummary&sort=[{%22property%22:%22playerName%22,%22direction%22:%22ASC%22},{%22property%22:%22goals%22,%22direction%22:%22DESC%22},{%22property%22:%22assists%22,%22direction%22:%22DESC%22}]&cayenneExp=gameTypeId=2%20and%20seasonId%3E=20172018%20and%20seasonId%3C=20172018')
data = req.json()['data']
my_data = []
for item in data:
season = item['seasonId']
player = item['playerName']
first_name = item['playerFirstName']
last_Name = item['playerLastName']
playerId = item['playerId']
height = item['playerHeight']
pos = item['playerPositionCode']
handed = item['playerShootsCatches']
city = item['playerBirthCity']
country = item['playerBirthCountry']
state = item['playerBirthStateProvince']
dob = item['playerBirthDate']
draft_year = item['playerDraftYear']
draft_round = item['playerDraftRoundNo']
draft_overall = item['playerDraftOverallPickNo']
my_data.append([playerId, player, first_name, last_Name, height, pos, handed, city, country, state, dob, draft_year, draft_round, draft_overall, season])
cur = conn.cursor()
cur.execute("CREATE TABLE t_skaters (data json);")
cur.executemany("INSERT INTO t_skaters VALUES (%s)", (my_data,))
data:
의 샘플
[[8468493, 'Ron Hainsey', 'Ron', 'Hainsey', 75, 'D', 'L', 'Bolton', 'USA', 'CT', '1981-03-24', 2000, 1, 13, 20172018], [8471339, 'Ryan Callahan', 'Ryan', 'Callahan', 70, 'R', 'R', 'Rochester', 'USA', 'NY', '1985-03-21', 2004, 4, 127, 20172018]]
- 답변 # 1
관련 자료
- postgresql - sum 및 count의 psycopg2 postgres SQL 요청은 jsondump를 따르지 않는 형식을 반환합니다
- python - 동시 psycopg2 postgres 선택 쿼리에서 빈 결과
- python - postgres 쿼리를 반환 할 때 Psycopg2 유효하지 않은 JSON
- python - psycopg2를 사용하여 JSON 배열 필드를 포함하는 튜플 목록을 Postgres 데이터베이스에 삽입
- pandas - Postgres 데이터베이스에 데이터 프레임 쓰기 psycopg2
- python 3.x - psycopg2를 사용하여 postgres 데이터베이스에 데이터를 삽입하는 방법
관련 질문
- python : NEO4J APOC 외부 변수에서 JSON 로드
- python : 파이썬의 관점 API에서 점수 값을 수집하는 방법은 무엇입니까?
- repl.it에서 python 파일을 main.py로 가져오는 방법은 무엇입니까?
- JSON python의 하위 카테고리에 액세스
- python : 단어 목록으로 배열을 만들고 json을 사용하여 배열을 자체 파일로 출력하면 속성 오류가 발생합니다.
- python : Json 파일에 항목을 추가하려고 하지만 계속 덮어씁니다.
- pdfminer.six python을 사용하여 PDF를 Json으로 내보내기
- python : 서로 다른 수준의 두 목록이 있는 중첩 JSON 파일 분해
- python : '데이터' 유형을 조정할 수 없습니다.
- SQL을 사용하여 정적 유형으로 레code 그룹화
"data"
라는 하나의 열이있는 테이블을 생성하려는 것 같습니다 . 이 열의 유형은 JSON입니다. (필드 당 하나의 열을 만드는 것이 좋습니다. 그러나 그것은 당신에게 달려 있습니다.)data
(요청에서 읽은)list
입니다 와이즈 비츠 에스. 내 의견에서 언급했듯이dict
를 반복 할 수 있습니다.data
로 한 번에 하나씩 인서트를 수행하십시오.executemany()
에 대한 여러 번의 호출보다 빠르지 않습니다. .내가 한 일은 다음과 같다 :
<올>관심있는 필드 목록을 만드십시오.
execute()
의 요소를 반복각
data
마다 와이즈 비즈 , 필드를item
로 추출하십시오.와이즈 비즈에게 전화
data
에 전달 (my_data
변환execute()
에서 JSON 문자열로)이것을 시도하십시오 :
모든 postgres 구문이 여기에 맞는지 100 % 확신 할 수는 없지만 (테스트 할 PG 데이터베이스에 액세스 할 수 없음)이 논리가 수행하려는 작업에 효과적이라고 생각합니다.
별도의 열 업데이트
여러 열을 처리하도록 create 문을 수정할 수 있지만 각 열의 데이터 유형을 알아야합니다. 수행 할 수있는 일부 유사 코드는 다음과 같습니다.
와이즈 비즈 교체 데이터에 적절한 값으로 설정하십시오.
dict