{"id":373,"date":"2020-04-07T21:28:09","date_gmt":"2020-04-07T12:28:09","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=373"},"modified":"2025-09-11T18:27:27","modified_gmt":"2025-09-11T09:27:27","slug":"python-sqlite3-connect%ec%97%90-%eb%8c%80%ed%95%b4","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2020\/04\/07\/373\/","title":{"rendered":"Python: sqlite3.connect()\uc5d0 \ub300\ud574"},"content":{"rendered":"\n<p>Python\uc744 \uc4f0\uba74\uc11c \uac00\uc7a5 \ubd88\ub9cc\uc778\uc810\uc774 \uc560\ub9e4\ud55c \ubb38\uc11c\ud654 \ubd80\ubd84\uc774\ub2e4. Dynamic type\uc5b8\uc5b4\ub2e4 \ubcf4\ub2c8, \ub9ac\ud134\uac12\uc774 \ubb34\uc5c7\uc778\uc9c0 \uc54c\uae30\uac00 \ud798\ub4e4\uace0, \uc608\uc81c\ub4e4\uc5d4 \uc2e4\ud328\uc2dc \ub9ac\ud134\uac12\uc774\ub098 \uc608\uc678\ucc98\ub9ac\uc5d0 \ub300\ud574 \uc5b8\uae09\uc774 \uc5c6\ub294\uacbd\uc6b0\ub97c \uc790\uc8fc \uc811\ud55c\ub2e4. \ud559\uc2b5\ud558\ub294 \uc218\uc900\uc5d0\uc11c\ub294 \ubcc4 \ubb38\uc81c\uac00 \uc5c6\ub294\ub370, \uc2e4\ubb34 \uc218\uc900\uc758 \uc644\uc131\ub3c4\uc5d0\uc120 \uc2e4\ud328\ub098 \uc608\uc678\ucc98\ub9ac\ub97c \uba85\ud655\ud558\uac8c \ud558\uc9c0 \uc54a\ub294\uac74 \ub9d0\uc774 \uc548\ub418\uac70\ub4e0. \uace0\uc791 sqlite3\uc5d0 connect() \ud558\ub294 \ub2e8\uacc4\uc5d0\uc11c \uc5ec\ub7ec\uac00\uc9c0\ub97c \uacaa\uc5b4\uc11c \uae30\ub85d\ud574\ubcf8\ub2e4.<\/p>\n\n\n\n<p>\uc77c\ub2e8, \uc81c\ub300\ub85c\ub41c \ubb38\uc11c\uac00 \uc544\ub2c8\uba74 try-except\ub97c \uc4f0\ub294 \ucf54\ub4dc\uac00 \uc798 \uc548\ubcf4\uc778\ub2e4. connect \uc2e4\ud328\ud558\uba74 \uc5b4\uca4c\ub77c\uace0? \ub2e4\ud589\ud788 <a href=\"https:\/\/www.sqlitetutorial.net\/sqlite-python\/creating-database\/\">\uc798 \uc124\uba85\ub41c \ubb38\uc11c<\/a>\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import sqlite3\nfrom sqlite3 import Error\n \n \ndef create_connection(db_file):\n    \"\"\" create a database connection to a SQLite database \"\"\"\n    conn = None\n    try:\n        conn = sqlite3.connect(db_file)\n        print(sqlite3.version)\n    except Error as e:\n        print(e)\n    finally:\n        if conn:\n            conn.close()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">import<\/span><span style=\"color: #ADBAC7\"> sqlite3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">from<\/span><span style=\"color: #ADBAC7\"> sqlite3 <\/span><span style=\"color: #F47067\">import<\/span><span style=\"color: #ADBAC7\"> Error<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">create_connection<\/span><span style=\"color: #ADBAC7\">(db_file):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #96D0FF\">&quot;&quot;&quot; create a database connection to a SQLite database &quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    conn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">try<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        conn <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> sqlite3.connect(db_file)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(sqlite3.version)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">except<\/span><span style=\"color: #ADBAC7\"> Error <\/span><span style=\"color: #F47067\">as<\/span><span style=\"color: #ADBAC7\"> e:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(e)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">finally<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> conn:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            conn.close()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Error\ud074\ub798\uc2a4\ub97c import\ud558\uace0, except\ub85c \uc5d0\ub7ec\ub97c \uc7a1\uc544 \ucc98\ub9ac\ud55c\ub2e4. <\/p>\n\n\n\n<p>\uc5b4\ub5a4 \uc5d0\ub7ec\ub4e4\uc774 \uc788\ub294\uc9c0, \uad00\ub828 \ub0b4\uc6a9\uc744 \ubcf4\ub824\uba74 <a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0249\/#connect\">PEP 249 \ubb38\uc11c<\/a>\ub97c \ubd10\uc57c\ud55c\ub2e4. \uc5ec\uae30\uc11c \uc880 \ubd88\ub9cc\uc778\ub370, \uc65c \ucf54\ub4dc\ub098 \ubaa8\ub4c8\ubb38\uc11c\uc5d0\uc11c \uba85\ud655\ud55c \ub2f5\uc744 \ubabb\uc5bb\uace0 \ucd94\uc0c1\uc801\uc778 \uc778\ud130\ud398\uc774\uc2a4 \ubb38\uc11c\ub97c \ubcf4\uace0 \uc788\uc5b4\uc57c \ud558\ub294\uac74\uc9c0. \uc774\uac70\ub77c\ub3c4 \uc788\uc73c\ub2c8 \ub2e4\ud589\uc774\uc9c0\ub9cc. \uc778\ud130\ud398\uc774\uc2a4 \ubb38\uc11c\ub85c\ub294 \ub9cc\uc871 \ubabb\ud558\ub294 \uc774\uc720\ub294 \ubb38\uc11c\uac00 \ubaa8\ub4c8\uc744 \uc644\uc804\ud788 \uc124\uba85\ud558\uc9c0 \ubabb\ud55c\ub2e4\ub294 \uc0ac\uc2e4\uc774\ub2e4. \uc774\uc640 \uad00\ub828\ud574\uc11c \uacaa\uc740 \uc77c\uc5d0 \ub300\ud574 \uc598\uae30\ud574 \ubcf4\uaca0\ub2e4.<\/p>\n\n\n\n<p>\uc9c1\uc811 \ud14c\uc2a4\ud2b8 \ud574\ubcf4\ub294 \uacfc\uc815\uc5d0\uc11c unittest\ub3c4 \uc791\uc131\uc911\uc774\uc5c8\ub2e4. unittest\uc5d0\uc11c \uace0\uc758\ub85c connect()\uac00 \uc2e4\ud328\ud558\ub3c4\ub85d \ub9cc\ub4e4\ub824 \ud588\ub294\ub370, \uc544\ub2c8 \uc774\uac8c \ubb34\uc2a8\uc77c\uc774\uc57c? db\uac00 \uc544\ub2cc \ud30c\uc77c\ub4e4\ub3c4 connect\ud558\ub294\ub370 \uc544\ubb34 \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\uc558\ub2e4. \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc5d0 connect\ud574\ub3c4, touch\ub85c \uc0dd\uc131\ud55c \ube48 \ud30c\uc77c\ub3c4, \uc774\ubbf8\uc9c0 \ud30c\uc77c\ub3c4 \ub2e4 connect\uac00 \ub418\uc5c8\ub2e4. \ubb50, \uc774 \ud6c4 \ub2e4\ub978 \uc791\uc5c5\uc5d0\uc11c \uc608\uc678\uac00 \ubc1c\uc0dd\ud558\uae34 \ud558\uaca0\uc9c0\ub9cc. <\/p>\n\n\n\n<p>\uc5ec\ub7ec \uc2dc\ud589\ucc29\uc624\ub97c \uac70\uccd0 \uc54c\uac8c \ub41c\uac74, create \uc635\uc158\uc774 \ub4e4\uc5b4\uac00\uba74 \uc5b4\ub5a4 \ud30c\uc77c\uc774\ub4e0 \uc131\uacf5\uc801\uc73c\ub85c connect \ub41c\ub2e4\ub294 \uac83\uc774\ub2e4. create \uc635\uc158\uc744 \ube7c\uace0 connect\uc2dc\ub3c4\ud558\uba74, DB\ud30c\uc77c\uc774 \uc544\ub2cc\uacbd\uc6b0 \uc608\uc678\uac00 \ubc1c\uc0dd\ud568\uc744 \ud655\uc778\ud588\ub2e4. \uc774\ub97c \uc704\ud574 connect\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud588\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class BContactDB:\n    def __init__(self):\n        super().__init__()\n        self.connection: sqlite3.Connection = None\n\n    def connect(self, dbpath: str, mode: str = \"rwc\") -> bool:\n        try:\n            self.connection = sqlite3.connect(f\"file:{dbpath}?mode={mode}\", uri=True)\n            print(sqlite3.version)\n            return True\n        except Error as err:\n            print(err)\n            print(self.connection)\n            return False\n\n    def close(self):\n        if self.connection is not None:\n            self.connection.close()\n            print(self.connection)\n            self.connection = None<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">BContactDB<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">().<\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection: sqlite3.Connection <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">None<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">connect<\/span><span style=\"color: #ADBAC7\">(self, dbpath: <\/span><span style=\"color: #6CB6FF\">str<\/span><span style=\"color: #ADBAC7\">, mode: <\/span><span style=\"color: #6CB6FF\">str<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;rwc&quot;<\/span><span style=\"color: #ADBAC7\">) -&gt; <\/span><span style=\"color: #6CB6FF\">bool<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">try<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> sqlite3.connect(<\/span><span style=\"color: #F47067\">f<\/span><span style=\"color: #96D0FF\">&quot;file:<\/span><span style=\"color: #F47067\">{<\/span><span style=\"color: #ADBAC7\">dbpath<\/span><span style=\"color: #F47067\">}<\/span><span style=\"color: #96D0FF\">?mode=<\/span><span style=\"color: #F47067\">{<\/span><span style=\"color: #ADBAC7\">mode<\/span><span style=\"color: #F47067\">}<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #F69D50\">uri<\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #6CB6FF\">True<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(sqlite3.version)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">except<\/span><span style=\"color: #ADBAC7\"> Error <\/span><span style=\"color: #F47067\">as<\/span><span style=\"color: #ADBAC7\"> err:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(err)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">False<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">close<\/span><span style=\"color: #ADBAC7\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection <\/span><span style=\"color: #F47067\">is<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">not<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">None<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection.close()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.connection <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">None<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub7a9\ud551 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uc911\uc774\ub77c\uc11c, \uc704\uc640\uac19\uc774 db\ud30c\uc77c\uc758 \ud328\uc2a4\uc640 \ub514\ud3f4\ud2b8 \uac12\uc744 &#8220;rwc&#8221;\ub85c \uc9c0\uc815\ud55c mode\uac12\uc744 \ubc1b\uc544 connect\ud558\ub3c4\ub85d \ubcc0\uacbd\ud588\ub2e4. &#8216;r&#8217;, &#8216;w&#8217;, &#8216;c&#8217;\ub294 \uac01\uac01 read, write, create\ub97c \uc758\ubbf8\ud55c\ub2e4. connect() \ud568\uc218\uc5d0\uc120 uri \ud3ec\ub9f7\uc73c\ub85c \uc778\uc790\ub97c \ub118\uae30\ub294\ub370, &#8220;uri&#8221;\uc778\uc790\ub3c4 &#8220;True&#8221;\ub85c \uc124\uc815\ud574\uc57c \ud55c\ub2e4. \uc774\uc5d0\ub300\ud55c unittest\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ub9cc\ub4e4\uc5c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class TestBContactDB(TestCase):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.test_db_name: str = \"test.db\"\n\n    def test_connect(self):\n        dbutil = BContactDB()\n        ret = dbutil.connect(self.test_db_name)\n        dbutil.close()\n        self.assertTrue(ret)\n\n        Path(self.test_db_name).unlink()\n        ret = dbutil.connect(self.test_db_name, \"rw\")\n        dbutil.close()\n        self.assertFalse(ret)\n\n        ret = dbutil.connect(self.test_db_name, \"rwc\")\n        dbutil.close()\n        self.assertTrue(ret)\n        ret = dbutil.connect(self.test_db_name, \"rw\")\n        dbutil.close()\n        self.assertTrue(ret)\n        Path(self.test_db_name).unlink()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TestBContactDB<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">TestCase<\/span><span style=\"color: #ADBAC7\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">(self, <\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">args, <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #ADBAC7\">kwargs):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">().<\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">args, <\/span><span style=\"color: #F47067\">**<\/span><span style=\"color: #ADBAC7\">kwargs)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name: <\/span><span style=\"color: #6CB6FF\">str<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;test.db&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">test_connect<\/span><span style=\"color: #ADBAC7\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        dbutil <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> BContactDB()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        ret <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> dbutil.connect(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        dbutil.close()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.assertTrue(ret)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Path(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name).unlink()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        ret <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> dbutil.connect(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name, <\/span><span style=\"color: #96D0FF\">&quot;rw&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        dbutil.close()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.assertFalse(ret)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        ret <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> dbutil.connect(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name, <\/span><span style=\"color: #96D0FF\">&quot;rwc&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        dbutil.close()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.assertTrue(ret)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        ret <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> dbutil.connect(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name, <\/span><span style=\"color: #96D0FF\">&quot;rw&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        dbutil.close()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.assertTrue(ret)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Path(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.test_db_name).unlink()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>sqlite3\uc758 connect() \ud558\ub098\ub97c \uc81c\ub300\ub85c \uc4f0\ub824\uba74, try-except\uc758 \uc0ac\uc6a9\uc740 \ub2f9\uc5f0<\/li>\n\n\n\n<li>\ubb34\uc870\uac74 connect()\ub97c \uc0ac\uc6a9\ud558\uc9c0\ub9d0\uace0, DB\ud30c\uc77c\uc774 \uc774\ubbf8 \uc874\uc7ac\ud558\ub294\uc9c0 \ub530\ub85c \uccb4\ud06c\ud574\uc11c \uc874\uc7ac\ud558\uc9c0 \uc54a\uc73c\uba74 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\uc73c\ub098, \uc874\uc7ac\ud558\ub294\uacbd\uc6b0 &#8220;rw&#8221; \uc635\uc158\uc73c\ub85c connect\ud574\uc57c \ube44\uc815\uc0c1 DB\uc5d0 \uc5f0\uacb0\ub418\ub294 \uac78 \ub9c9\uc744 \uc218 \uc788\ub2e4.<\/li>\n\n\n\n<li>Python \ubb38\uc11c\ub4e4\uc5d0\uc11c \uc778\uc790\ub4e4\uacfc \ub9ac\ud134\uac12\uc758 \ud0c0\uc785\uc774\ub098  \uc608\uc678\ucc98\ub9ac \ubd80\ubd84\uc744 \uc880 \ub354 \uba85\uc2dc\uc801\uc73c\ub85c \ub2e4\ub904\uc92c\uc73c\uba74 \ud558\ub294 \ubc14\ub7a8\uc774\uc788\ub2e4.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Python\uc744 \uc4f0\uba74\uc11c \uac00\uc7a5 \ubd88\ub9cc\uc778\uc810\uc774 \uc560\ub9e4\ud55c \ubb38\uc11c\ud654 \ubd80\ubd84\uc774\ub2e4. Dynamic type\uc5b8\uc5b4\ub2e4 \ubcf4\ub2c8, \ub9ac\ud134\uac12\uc774 \ubb34\uc5c7\uc778\uc9c0 \uc54c\uae30\uac00 \ud798\ub4e4\uace0, \uc608\uc81c\ub4e4\uc5d4 \uc2e4\ud328\uc2dc \ub9ac\ud134\uac12\uc774\ub098 \uc608\uc678\ucc98\ub9ac\uc5d0 \ub300\ud574 \uc5b8\uae09\uc774 \uc5c6\ub294\uacbd\uc6b0\ub97c \uc790\uc8fc \uc811\ud55c\ub2e4. \ud559\uc2b5\ud558\ub294 \uc218\uc900\uc5d0\uc11c\ub294 \ubcc4 \ubb38\uc81c\uac00 \uc5c6\ub294\ub370, \uc2e4\ubb34 \uc218\uc900\uc758 \uc644\uc131\ub3c4\uc5d0\uc120 \uc2e4\ud328\ub098 \uc608\uc678\ucc98\ub9ac\ub97c \uba85\ud655\ud558\uac8c \ud558\uc9c0 \uc54a\ub294\uac74 \ub9d0\uc774 \uc548\ub418\uac70\ub4e0. \uace0\uc791 sqlite3\uc5d0 connect() \ud558\ub294 \ub2e8\uacc4\uc5d0\uc11c \uc5ec\ub7ec\uac00\uc9c0\ub97c \uacaa\uc5b4\uc11c \uae30\ub85d\ud574\ubcf8\ub2e4. \uc77c\ub2e8, \uc81c\ub300\ub85c\ub41c \ubb38\uc11c\uac00 \uc544\ub2c8\uba74 <a href=\"http:\/\/batmask.net\/index.php\/2020\/04\/07\/373\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,33],"tags":[114,115,35,64,131,55],"class_list":["post-373","post","type-post","status-publish","format-standard","hentry","category-note4reference","category-python","tag-connect","tag-exception","tag-python","tag-sqlite3","tag-database-kr2","tag-python-kr"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=373"}],"version-history":[{"count":4,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/373\/revisions"}],"predecessor-version":[{"id":3435,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/373\/revisions\/3435"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=373"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}