본문 바로가기
무모한 도전-주식 인공지능 만들기

SQLite3로 데이터 베이스를 다루는 연습-2-

by 인터넷떠돌이 2018. 11. 22.
반응형

안녕하세요?


지난번 포스팅에서 데이터베이스 파일에 데이터를 집어넣는 작업이 실패했는 것을 포스팅 했는데, 그래서 이번에는 이러저런 해결책을 모색하였고, 결국 해결하기는 했습니다. 그래서 관련된 내용을 이번 시간에 포스팅 하고자 합니다.



일단 PyCharm 콘솔에서 계속 하기는 했지만, 여전히 성과는 없었습니다.



그래서 Jupyter Qt console을 실행시켜야 하는데, 실행방법은 간단하게도 아나콘다 프롬프트에서 먼저 제가 만들어 놓은 PyQtTest라는 가상환경에 들어간 다음, 그냥 jupyter qtconsole이라고 입력하기만 하면 되었습니다.



일단 Jupyter QtConsole을 실행시킨 화면입니다. 이전의 아나콘다 프롬프트와는 다르게 하얀색 배경화면이 나오는 것을 볼 수 있었습니다.



이전 포스티에서 포스팅 했던 것과 같이, 입력을 해서, kospi.db에 있는 stocktest라는 테이블에 데이터를 집어 넣을 수 있으리라 생각을 하고 입력을 합니다.



그런데도 전혀 입력이 되지 않아서, 한번 SQL구문에 무슨 에러가 있는 것인가 싶어서, 한번 DB Browser for SQLite에서 SQL구문으로 입력을 해서 데이터가 들어가는지 여부를 확인해 보도록 합니다.



그러자 위 스크린샷처럼 에러가 떴습니다. 그래서 처음에는 아무래도 경로지정에 무슨 에러가 나온 것이 아닌가 하는 생각이 들어서, 한번 다른 시도를 해 보고자 합니다.




그래서 기존의 /대신에 \을 사용해서 한번 경로를 지정해 보았습니다만, 어떻게 된 것인지 모르겠습니다만, 여기서는 에러가 났습니다. 아무래도 PyCharm에서는 \를 사용해서 경로를 지정하였지만, Jupyter QtConsole과 같은 콘솔 화면에서는 /를 이용해서 경로를 구분하는 모양입니다.



그래서 이번에는 PyCharm의 콘솔에서 실행해서 만든 데이터 베이스 파일이 문제인가 싶어서, Jupyter QtConsole에서 만들어 낸 kospi2.db라는 파일을 만들어 보고자 합니다.



그런데 이번에도 어떻게 된 것인지 데이터 베이스의 파일에 전혀 데이터가 입력되지 않는 것을 확인할 수 있었습니다.



그래서 한번 미리 데이터 베이스 파일에 데이터가 들어갈 만한 빈 자리를 만들어 놓고서 Jupyter QtConsole에서 데이터를 입력해 보도록 합니다.



역시나 거의 같은 방법으로 주식 데이터를 입력하는 방법을 사용해 봅니다. 다른점이 하나 있다면, 데이터 베이스의 파일이 kospi2.db라는 것과 테이블의 이름이 daydata라는 것 입니다.



그래도 데이터가 입력이 되지 않아서, 데이터베이스의 파일이 잘못된 것인가 싶어서, Jupyter QtConsole을 끈 다음에 DB Browser for SQLite에서 SQL쿼리를 이용해서 데이터를  집어 넣도록 시도해 보도록 합니다.




이 경우에는 제대로 데이터가 입력이 되는 것을 확인할 수 있었습니다. 그래서 다른 것은 빼고서라도, 일단 데이터 베이스의 파일은 크게 문제가 없다는 것을 알 수 있었습니다.



그래서 한번 인터넷을 뒤져보니까, sqlite3.connect("데이터베이스 파일의 경로").commit()라고 해서, commit() 라는 메소드가 빠져서 생기는 사태였습니다. 그래서 이번에는 위 스크린샷에서 보는 것과 같이, 일단 commit()을 데이터를 입력하고 나서 마지막에 입력하도록 합니다.



이제서야 데이터가 입력이 되는 것을 확인할 수 있었습니다. 이때는 그야말로 만세라고 부를만 했습니다. 이것으로 일단 데이터 베이스의 파일에 파이썬으로 데이터가 입력이 되지 않던 문제는 해결할 수 있었습니다.



두번째 row의 데이터도 입력을 하도록 해 봅니다. 당연 여기서도 con.commit()이라고 해서 commit()을 빼먹지 말도록 합니다.



두번째 데이터도 열어보니 제대로 입력이 되는 것을 확인할 수 있었습니다.



그리고 Jupyter QtConsole에서 먼저 SELECT * From 테이블의 이름 이라는 SQL구문을 입력하지 않으면, cursor.fetchall()이나 cursor.fetchone()이라는 구문을 사용해도 전혀 데이터를 보여주지 않는 것을 확인할 수 있었습니다. 사소해 보이지만, 이 역시 중요함으로, 파이썬 상에서는 데이터베이스에서 데이터를 불러 올 때, cursor.execute("SELECT * From 테이블의 이름")이라는 구문을 입력해서 반드시 어느 테이블에서 모든 데이터(*)를 선택한 것인지를 알려 주어야 합니다.

반응형