{"componentChunkName":"component---src-templates-blog-post-js","path":"/sqlalchemy/2020-08-03-SQLAlchemy-CRUD/","result":{"data":{"site":{"siteMetadata":{"title":"Jinote","author":"jinoan","siteUrl":"https://jinoan.netlify.app","comment":{"disqusShortName":"","utterances":"jinoan/blog-comment"},"sponsor":{"buyMeACoffeeId":"jinoan"}}},"markdownRemark":{"id":"9d4e3760-6297-5533-bde3-1f41333378ca","excerpt":"models.py 만들기 SQLAlchemy로 DB를 사용하기 위해 DB의 테이블 객체를 생성해야 한다.\nflask-sqlacodegen으로 쉽게 생성 가능. flask-sqlacodegen 설치 models.py 생성 (PostgreSQL 사용시) 테이블 객체의 형태 Session 연결 CRUD Select Insert Update Delete 그 외… Join Pandas data frame으로 결과 불러오기","html":"<h1 id=\"modelspy-만들기\" style=\"position:relative;\"><a href=\"#modelspy-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"modelspy 만들기 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>models.py 만들기</h1>\n<p>SQLAlchemy로 DB를 사용하기 위해 DB의 테이블 객체를 생성해야 한다.\nflask-sqlacodegen으로 쉽게 생성 가능.</p>\n<h3 id=\"flask-sqlacodegen-설치\" style=\"position:relative;\"><a href=\"#flask-sqlacodegen-%EC%84%A4%EC%B9%98\" aria-label=\"flask sqlacodegen 설치 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>flask-sqlacodegen 설치</h3>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ pip3 <span class=\"token function\">install</span> flask-sqlacodegen</code></pre></div>\n<h3 id=\"modelspy-생성-postgresql-사용시\" style=\"position:relative;\"><a href=\"#modelspy-%EC%83%9D%EC%84%B1-postgresql-%EC%82%AC%EC%9A%A9%EC%8B%9C\" aria-label=\"modelspy 생성 postgresql 사용시 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>models.py 생성 (PostgreSQL 사용시)</h3>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ flask-sqlacodegen <span class=\"token string\">\"postgresql://{아이디}:{패스워드}@{DB호스트}:{포트번호}/{DB이름}\"</span> --flask <span class=\"token operator\">></span> models.py</code></pre></div>\n<h3 id=\"테이블-객체의-형태\" style=\"position:relative;\"><a href=\"#%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B0%9D%EC%B2%B4%EC%9D%98-%ED%98%95%ED%83%9C\" aria-label=\"테이블 객체의 형태 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>테이블 객체의 형태</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Table</span><span class=\"token punctuation\">(</span>db<span class=\"token punctuation\">.</span>Model<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    __tablename__ <span class=\"token operator\">=</span> <span class=\"token string\">'tables'</span>\n\n    table_pkey <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span>Column<span class=\"token punctuation\">(</span>db<span class=\"token punctuation\">.</span>Integer<span class=\"token punctuation\">,</span> primary_key<span class=\"token operator\">=</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span> server_default<span class=\"token operator\">=</span>db<span class=\"token punctuation\">.</span>FetchedValue<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    tname <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span>Column<span class=\"token punctuation\">(</span>db<span class=\"token punctuation\">.</span>String<span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> nullable<span class=\"token operator\">=</span><span class=\"token boolean\">False</span><span class=\"token punctuation\">)</span>\n    tmaker <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span>Column<span class=\"token punctuation\">(</span>db<span class=\"token punctuation\">.</span>ForeignKey<span class=\"token punctuation\">(</span><span class=\"token string\">'makers.mname'</span><span class=\"token punctuation\">,</span> ondelete<span class=\"token operator\">=</span><span class=\"token string\">'CASCADE'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    maker <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span>relationship<span class=\"token punctuation\">(</span><span class=\"token string\">'Maker'</span><span class=\"token punctuation\">,</span> primaryjoin<span class=\"token operator\">=</span><span class=\"token string\">'Table.tmaker == Maker.mname'</span><span class=\"token punctuation\">,</span> backref<span class=\"token operator\">=</span><span class=\"token string\">'tables'</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h1 id=\"session-연결\" style=\"position:relative;\"><a href=\"#session-%EC%97%B0%EA%B2%B0\" aria-label=\"session 연결 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Session 연결</h1>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> models  <span class=\"token comment\"># models.py</span>\n<span class=\"token keyword\">from</span> sqlalchemy <span class=\"token keyword\">import</span> create_engine\n<span class=\"token keyword\">from</span> sqlalchemy<span class=\"token punctuation\">.</span>orm <span class=\"token keyword\">import</span> sessionmaker\n\nengine <span class=\"token operator\">=</span> create_engine<span class=\"token punctuation\">(</span><span class=\"token string\">'postgresql://{아이디}:{패스워드}@{DB호스트}:{포트번호}/{DB이름}'</span><span class=\"token punctuation\">)</span>\nSession <span class=\"token operator\">=</span> sessionmaker<span class=\"token punctuation\">(</span>bind<span class=\"token operator\">=</span>engine<span class=\"token punctuation\">)</span>\nsession <span class=\"token operator\">=</span> Session<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h1 id=\"crud\" style=\"position:relative;\"><a href=\"#crud\" aria-label=\"crud permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CRUD</h1>\n<h3 id=\"select\" style=\"position:relative;\"><a href=\"#select\" aria-label=\"select permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Select</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># select * from tables;</span>\nres_all <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">all</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">for</span> rec <span class=\"token keyword\">in</span> res_all<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f'tname: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>rec<span class=\"token punctuation\">.</span>tname<span class=\"token punctuation\">}</span></span><span class=\"token string\">, tmaker: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>rec<span class=\"token punctuation\">.</span>tmaker<span class=\"token punctuation\">}</span></span><span class=\"token string\">'</span></span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># select * from tables where tname = 'aaa';</span>\nres_aaa <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>filter_by<span class=\"token punctuation\">(</span>tname<span class=\"token operator\">=</span><span class=\"token string\">'aaa'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># .filter()를 사용해도 됨</span>\nres_aaa <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">filter</span><span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">.</span>tname <span class=\"token operator\">==</span> <span class=\"token string\">'aaa'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>res_aaa<span class=\"token punctuation\">.</span>tmaker<span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"insert\" style=\"position:relative;\"><a href=\"#insert\" aria-label=\"insert permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Insert</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># insert into tables(tname, tmaker) values ('bbb', 'jinoan');</span>\ndata <span class=\"token operator\">=</span> models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">(</span>tname<span class=\"token operator\">=</span><span class=\"token string\">'bbb'</span><span class=\"token punctuation\">,</span> tmaker<span class=\"token operator\">=</span><span class=\"token string\">'jinoan'</span><span class=\"token punctuation\">)</span>\nsession<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span>\nsession<span class=\"token punctuation\">.</span>commit<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"update\" style=\"position:relative;\"><a href=\"#update\" aria-label=\"update permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Update</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># update tables set tname = 'ccc' where tname = 'bbb';</span>\nres_bbb <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>filter_by<span class=\"token punctuation\">(</span>tname<span class=\"token operator\">=</span><span class=\"token string\">'bbb'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nres_bbb<span class=\"token punctuation\">.</span>tname <span class=\"token operator\">=</span> <span class=\"token string\">'ccc'</span>\nsession<span class=\"token punctuation\">.</span>commit<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"delete\" style=\"position:relative;\"><a href=\"#delete\" aria-label=\"delete permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Delete</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># delete from tables where tname = 'ccc';</span>\nsession<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>filter_by<span class=\"token punctuation\">(</span>tname<span class=\"token operator\">=</span><span class=\"token string\">'ccc'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>delete<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># commit하지 않고 되돌리고 싶을 때</span>\nsession<span class=\"token punctuation\">.</span>rollback<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># delete를 다음처럼 할 수도 있다.</span>\nres_ccc <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>filter_by<span class=\"token punctuation\">(</span>tname<span class=\"token operator\">=</span><span class=\"token string\">'ccc'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>first<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nsession<span class=\"token punctuation\">.</span>delete<span class=\"token punctuation\">(</span>res_ccc<span class=\"token punctuation\">)</span>\n\nsession<span class=\"token punctuation\">.</span>commit<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h1 id=\"그-외\" style=\"position:relative;\"><a href=\"#%EA%B7%B8-%EC%99%B8\" aria-label=\"그 외 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>그 외…</h1>\n<h3 id=\"join\" style=\"position:relative;\"><a href=\"#join\" aria-label=\"join permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Join</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">res_all <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>join<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Maker<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">all</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># reference 값이 무엇인지 정확히 명시하려면</span>\nres_all <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span>\\\n\t<span class=\"token punctuation\">.</span>select_from<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span>\\\n    <span class=\"token punctuation\">.</span>join<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Maker<span class=\"token punctuation\">,</span> models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">.</span>tmaker<span class=\"token operator\">==</span>models<span class=\"token punctuation\">.</span>Maker<span class=\"token punctuation\">.</span>mname<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">all</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"pandas-data-frame으로-결과-불러오기\" style=\"position:relative;\"><a href=\"#pandas-data-frame%EC%9C%BC%EB%A1%9C-%EA%B2%B0%EA%B3%BC-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0\" aria-label=\"pandas data frame으로 결과 불러오기 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Pandas data frame으로 결과 불러오기</h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> pandas <span class=\"token keyword\">as</span> pd\n\nquery <span class=\"token operator\">=</span> session<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">(</span>models<span class=\"token punctuation\">.</span>Table<span class=\"token punctuation\">)</span>\ndf <span class=\"token operator\">=</span> pd<span class=\"token punctuation\">.</span>read_sql<span class=\"token punctuation\">(</span>query<span class=\"token punctuation\">.</span>statement<span class=\"token punctuation\">,</span> session<span class=\"token punctuation\">.</span>bind<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>df<span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"SQLAlchemy CRUD","date":"August 03, 2020"}}},"pageContext":{"slug":"/sqlalchemy/2020-08-03-SQLAlchemy-CRUD/","previous":{"fields":{"slug":"/raspberry_pi/2020-07-24-Raspberry-Pi-3-B+-무선랜-비활성화/"},"frontmatter":{"title":"Raspberry Pi 3 B+ 무선 랜 비활성화","category":"raspberry_pi","draft":false}},"next":{"fields":{"slug":"/raspberry_pi/2020-08-06-Raspberry-Pi-3-B+-USB-포트-고정/"},"frontmatter":{"title":"Raspberry Pi 3 B+ USB 포트 고정","category":"raspberry_pi","draft":false}}}},"staticQueryHashes":["3128451518","521680639"]}