रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) बेहद लोकप्रिय हैं और एप्लिकेशन डेवलपमेंट का अभिन्न हिस्सा हैं। कई अलग-अलग RDBMS मौजूद हैं, जैसे MySQL, PostgreSQL, IBM DB2, Oracle 11g इत्यादि। ऐसा ही एक RDBMS है SQLite। SQLite व्यापक रूप से उपयोग किया जाता है और कई कारणों से डेवलपर्स का पसंदीदा है -
बेहद हल्का (500 KB से अधिक नहीं)
यह सर्वरलेस है, यानी इसकी सेवाएँ उपयोग करने के लिए किसी अलग सर्वर की आवश्यकता नहीं
कोई जटिल सेटअप नहीं
पूरी तरह ट्रांजैक्शनल और कंकरेंसी-अनुपालक
आदि...
हालाँकि, SQLite की कुछ सीमाएँ भी हैं। उदाहरण के लिए, यह RIGHT OUTER JOIN और FULL OUTER JOIN जैसे जोइन्स को सपोर्ट नहीं करता। लेकिन इसके फ़ायदे इसकी सीमाओं से कहीं अधिक हैं। इस ट्यूटोरियल में, आप Python में SQLite का उपयोग करना सीखेंगे, और इसमें शामिल विषयों का संक्षिप्त विवरण नीचे दिया गया है -
SQLite की इंस्टॉलेशन और सेटअप
SQLite में डेटाबेस और टेबल बनाना
.csv फ़ाइल को SQLite डेटाबेस में इंपोर्ट करना
Python में SQLite
नोट: यह ट्यूटोरियल मानकर चलता है कि आप SQL (किसी भी RDBMS के साथ) और Python (3) की बुनियादी जानकारी से पहले से परिचित हैं। यदि आप इन कौशलों को फिर से ताज़ा करना चाहते हैं, तो निम्न संसाधन उपयोगी हो सकते हैं -
जब आपको SQL और Python के साथ काम करने में सहजता महसूस हो, तो आप वापस आकर यहीं से आगे बढ़ सकते हैं।
इंस्टॉलेशन और सेटअप
SQLite को इंस्टॉल और सेटअप करना कुछ ही मिनटों का काम है। आप कमांड लाइन टूल्स से SQLite का उपयोग कर सकते हैं, लेकिन एक GUI-आधारित यूटिलिटी भी है जो एक अच्छे ग्राफ़िकल इंटरफ़ेस के माध्यम से SQLite का उपयोग करने देती है। इस ट्यूटोरियल के लिए, आप DB Browser for SQLite का उपयोग करेंगे। शुरुआत करने के लिए, अपने OS प्लेटफ़ॉर्म के अनुरूप इस टूल को यहाँ से डाउनलोड करें।
Windows 7 प्लेटफ़ॉर्म पर, DB Browser for SQLite का इंटरफ़ेस इस तरह दिखता है -
डेटाबेस और टेबल बनाना
DB Browser टूल तैयार होने के बाद, आप आगे बढ़ने के लिए एक नया SQLite डेटाबेस बना सकते हैं। इसके लिए, आप New Database टैब पर क्लिक कर सकते हैं -
New Database टैब पर क्लिक करने के बाद, आपसे डेटाबेस का नाम दर्ज करने के लिए कहा जाएगा। अपनी पसंद का नाम दें और आगे बढ़ें। आपके दिए गए नाम का एक खाली डेटाबेस तुरंत बन जाएगा, और फिर आपसे उस डेटाबेस के अंतर्गत एक टेबल बनाने के लिए कहा जाएगा। अभी आप टेबल बनाने का भाग छोड़ सकते हैं; जल्द ही आप इस पर आएँगे।
टेबल बनाने के लिए, आपको टेबल की स्कीमा तय करनी होगी। इस ट्यूटोरियल और समझ के उद्देश्य से, पहले एक सरल टेबल consumers बनाते हैं, जिसमें निम्न फ़ील्ड और डेटा-टाइप होंगे -
consumer_id (integer)
consumer_full_name (string) (null नहीं हो सकता)
consumer_email (string) (null नहीं हो सकता)
consumer_grade (character) (null नहीं हो सकता)
नोट: यदि आप डेटाबेस स्कीमा डिज़ाइनिंग से परिचित हैं, तो आपको याद होगा कि consumer_id फ़ील्ड इस टेबल की प्राइमरी की है (इसीलिए यह रेखांकित है)।
टेबल बनाने के लिए, Create Table टैब पर क्लिक करें और आपको वह विवरण दर्ज करने के लिए कहा जाएगा जो आप अपनी टेबल के लिए चाहते हैं -
यदि आप ऊपर दिए गए चित्र को ध्यान से देखें, तो पाएँगे कि इसमें वही सटीक विवरण हैं जिन्हें आप consumers टेबल में सम्मिलित करना चाहते थे। आप टेबल बनाने के लिए संबंधित SQL भी देख सकते हैं। DB Browser टूल यह काम बहुत कुशलता से कर देता है। यह करने के बाद, OK बटन पर क्लिक करें और कुछ देर पहले बनाए गए डेटाबेस के अंतर्गत consumers टेबल दिखाई देनी चाहिए -
sqlite_sequence टेबल इसलिए है क्योंकि यदि आपने consumer_id फ़ील्ड को ऑटो-इन्क्रिमेंटेड बताया है, तो SQLite सीक्वेंस बनाए रखने के लिए अलग टेबल बनाता है। आप Execute SQL सेक्शन में जाकर अन्य SQL क्वेरी भी चला सकते हैं। अपनी पसंदीदा SQL क्वेरी चलाने के लिए स्वतंत्र महसूस करें।
अब Python का उपयोग कर SQLite डेटाबेस के साथ इंटरैक्ट करने से पहले, देखते हैं कि .csv फ़ाइल को SQLite डेटाबेस में कैसे इंपोर्ट करें और विश्लेषण में उपयोग करें।
एक .csv फ़ाइल को SQLite डेटाबेस में इंपोर्ट करना
आपके द्वारा बनाए गए डेटाबेस में .csv फ़ाइल इंपोर्ट करने के लिए, बस यह नेविगेशन अपनाएँ: File -> Import -> Table from CSV file। इस उद्देश्य के लिए आप कोई भी .csv फ़ाइल उपयोग कर सकते हैं। हमारे उदाहरण में इसमें दुनिया भर के विभिन्न देशों के विवरण हैं। हम फ़ाइल तक नेविगेट करते हैं और उसके बाद नीचे जैसा डायलॉग बॉक्स दिखता है -
DB Browser यहाँ कई बातें निर्दिष्ट करने देता है, जिनमें टेबल के नाम भी शामिल हैं। सुनिश्चित करें कि आप Column names in the first line विकल्प को चेक करें ताकि SQLite कॉलम नाम स्वतः निकाल सके। विशिष्टताएँ तय करने के बाद OK पर क्लिक करें।
हमारे उदाहरण में, हमें टेबल के लिए एक प्रविष्टि दिखनी चाहिए -
कुछ select क्वेरी चलाकर देखें कि टेबल सही से इंपोर्ट हुई है या नहीं।
Python में SQLite
अब आपके पास काम करने के लिए एक डेटाबेस और एक टेबल तैयार है। Python के ज़रिए SQLite डेटाबेस के साथ इंटरैक्ट करने के लिए, आपको sqlite3 मॉड्यूल की आवश्यकता होगी, जो Anaconda डिस्ट्रीब्यूशन के साथ आता है।
अब, आप sqlite3 द्वारा प्रदान की गई connect() विधि का उपयोग करके बनाए गए डेटाबेस से कनेक्ट करेंगे। यह एक Connection ऑब्जेक्ट लौटाता है। connect मेथड को डेटाबेस का पथ दें। डेटाबेस आमतौर पर .db एक्सटेंशन में सेव होते हैं।
import sqlite3
conn = sqlite3.connect('tutorial.db')संचालित द्वारा
एक बार जब आपके पास डेटाबेस के लिए Connection हो, तो आप एक Cursor ऑब्जेक्ट बना सकते हैं और उसके execute() मेथड को कॉल करके SQL कमांड चला सकते हैं।
cur = conn.cursor()
cur.execute('SELECT * from countries')संचालित द्वारा
[('NLD','Netherlands','Europe','Western Europe','1581','Nederland','Constitutional Monarchy','Amsterdam'),('ALB','Albania','Europe','Southern Europe','1912','Shqiperia','Republic','Tirane'),('DZA','Algeria','Africa','Northern Africa','1962','Al-Jaza\x92ir/Algerie','Republic','Algiers'),('ASM','American Samoa','Oceania','Polynesia', None,'Amerika Samoa','US Territory','Pago Pago'),('AND','Andorra','Europe','Southern Europe','1278','Andorra','Parliamentary Coprincipality','Andorra la Vella'),('AGO','Angola','Africa','Central Africa','1975','Angola','Republic','Luanda'),('ATG','Antigua and Barbuda','North America','Caribbean','1981','Antigua and Barbuda','Constitutional Monarchy',"Saint John's"),('ARE','United Arab Emirates','Asia','Middle East','1971','Al-Imarat al-´Arabiya al-Muttahida','Emirate Federation','Abu Dhabi'),('ARG','Argentina','South America','South America','1816','Argentina','Federal Republic','Buenos Aires'),('ARM','Armenia','Asia','Middle East','1991','Hajastan','Republic','Yerevan'),('ABW','Aruba','North America','Caribbean', None,'Aruba','Nonmetropolitan Territory of The Netherlands','Oranjestad'),('AUS','Australia','Oceania','Australia and New Zealand','1901','Australia','Constitutional Monarchy, Federation','Canberra'),('AZE','Azerbaijan','Asia','Middle East','1991','Azarbaycan','Federal Republic','Baku'),('BHS','Bahamas','North America','Caribbean','1973','The Bahamas','Constitutional Monarchy','Nassau'),('BHR','Bahrain','Asia','Middle East','1971','Al-Bahrayn','Monarchy (Emirate)','Manama'),('BGD','Bangladesh','Asia','Southern and Central Asia','1971','Bangladesh','Republic','Dhaka'),('BRB','Barbados','North America','Caribbean','1966','Barbados','Constitutional Monarchy','Bridgetown'),('BEL','Belgium','Europe','Western Europe','1830','Belgie/Belgique','Constitutional Monarchy, Federation','Brussels'),('BLZ','Belize','North America','Central America','1981','Belize','Constitutional Monarchy','Belmopan'),('BEN','Benin','Africa','Western Africa','1960','Benin','Republic','Porto-Novo'),('BMU','Bermuda','North America','North America', None,'Bermuda','Dependent Territory of the UK','Hamilton'),('BTN','Bhutan','Asia','Southern and Central Asia','1910','Druk-Yul','Monarchy','Thimphu'),('BOL','Bolivia','South America','South America','1825','Bolivia','Republic','La Paz'),('BIH','Bosnia and Herzegovina','Europe','Southern Europe','1992','Bosna i Hercegovina','Federal Republic','Sarajevo'),('BWA','Botswana','Africa','Southern Africa','1966','Botswana','Republic','Gaborone'),('BRA','Brazil','South America','South America','1822','Brasil','Federal Republic','Brasilia'),('GBR','United Kingdom','Europe','British Islands','1066','United Kingdom','Constitutional Monarchy','London'),('VGB','Virgin Islands, British','North America','Caribbean', None,'British Virgin Islands','Dependent Territory of the UK','Road Town'),('BRN','Brunei','Asia','Southeast Asia','1984','Brunei Darussalam','Monarchy (Sultanate)','Bandar Seri Begawan'),('BGR','Bulgaria','Europe','Eastern Europe','1908','Balgarija','Republic','Sofia'),('BFA','Burkina Faso','Africa','Western Africa','1960','Burkina Faso','Republic','Ouagadougou'),('BDI','Burundi','Africa','Eastern Africa','1962','Burundi/Uburundi','Republic','Bujumbura'),('CYM','Cayman Islands','North America','Caribbean', None,'Cayman Islands','Dependent Territory of the UK','George Town'),('CHL','Chile','South America','South America','1810','Chile','Republic','Santiago'),('CRI','Costa Rica','North America','Central America','1821','Costa Rica','Republic','San Jose'),('DJI','Djibouti','Africa','Eastern Africa','1977','Djibouti/Jibuti','Republic','Djibouti'),('DMA','Dominica','North America','Caribbean','1978','Dominica','Republic','Roseau'),('DOM','Dominican Republic','North America','Caribbean','1844','Republica Dominicana','Republic','Santo Domingo'),('ECU','Ecuador','South America','South America','1822','Ecuador','Republic','Quito'),('EGY','Egypt','Africa','Northern Africa','1922','Misr','Republic','Cairo'),('SLV','El Salvador','North America','Central America','1841','El Salvador','Republic','San Salvador'),('ERI','Eritrea','Africa','Eastern Africa','1993','Ertra','Republic','Asmara'),('ESP','Spain','Europe','Southern Europe','1492','Espana','Constitutional Monarchy','Madrid'),('ZAF','South Africa','Africa','Southern Africa','1910','South Africa','Republic','Pretoria'),('ETH','Ethiopia','Africa','Eastern Africa','-1000','YeItyop´iya','Republic','Addis Ababa'),('FJI','Fiji Islands','Oceania','Melanesia','1970','Fiji Islands','Republic','Suva'),('PHL','Philippines','Asia','Southeast Asia','1946','Pilipinas','Republic','Manila'),('FRO','Faroe Islands','Europe','Nordic Countries', None,'Foroyar','Part of Denmark','Torshavn'),('GAB','Gabon','Africa','Central Africa','1960','Le Gabon','Republic','Libreville'),('GMB','Gambia','Africa','Western Africa','1965','The Gambia','Republic','Banjul'),('GEO','Georgia','Asia','Middle East','1991','Sakartvelo','Republic','Tbilisi'),('GHA','Ghana','Africa','Western Africa','1957','Ghana','Republic','Accra'),('GIB','Gibraltar','Europe','Southern Europe', None,'Gibraltar','Dependent Territory of the UK', None),('GRD','Grenada','North America','Caribbean','1974','Grenada','Constitutional Monarchy',"Saint George's"),('GRL','Greenland','North America','North America', None,'Kalaallit Nunaat/Gronland','Part of Denmark','Nuuk'),('GUM','Guam','Oceania','Micronesia', None,'Guam','US Territory','Agana'),('GTM','Guatemala','North America','Central America','1821','Guatemala','Republic','Guatemala City'),('GIN','Guinea','Africa','Western Africa','1958','Guinee','Republic','Conakry'),('GNB','Guinea-Bissau','Africa','Western Africa','1974','Guine-Bissau','Republic','Bissau'),('GUY','Guyana','South America','South America','1966','Guyana','Republic','Georgetown'),('HTI','Haiti','North America','Caribbean','1804','Haiti/Dayti','Republic','Port-au-Prince'),('HND','Honduras','North America','Central America','1838','Honduras','Republic','Tegucigalpa'),('HKG','Hong Kong','Asia','Eastern Asia', None,'Xianggang/Hong Kong','Special Administrative Region of China', None),('IDN','Indonesia','Asia','Southeast Asia','1945','Indonesia','Republic','Jakarta'),('IND','India','Asia','Southern and Central Asia','1947','Bharat/India','Federal Republic','New Delhi'),('IRQ','Iraq','Asia','Middle East','1932','Al-´Iraq','Republic','Baghdad'),('IRN','Iran','Asia','Southern and Central Asia','1906','Iran','Islamic Republic','Tehran'),('IRL','Ireland','Europe','British Islands','1921','Ireland/Eire','Republic','Dublin'),('ISL','Iceland','Europe','Nordic Countries','1944','Island','Republic','Reykjavik'),('ISR','Israel','Asia','Middle East','1948','Yisra\x92el/Isra\x92il','Republic', None),('ITA','Italy','Europe','Southern Europe','1861','Italia','Republic','Rome'),('AUT','Austria','Europe','Western Europe','1918','Osterreich','Federal Republic','Vienna'),('JAM','Jamaica','North America','Caribbean','1962','Jamaica','Constitutional Monarchy','Kingston'),('JPN','Japan','Asia','Eastern Asia','-660','Nihon/Nippon','Constitutional Monarchy','Tokyo'),('YEM','Yemen','Asia','Middle East','1918','Al-Yaman','Republic',"Sana'a"),('JOR','Jordan','Asia','Middle East','1946','Al-Urdunn','Constitutional Monarchy','Amman'),('KHM','Cambodia','Asia','Southeast Asia','1953','Kampuchea','Constitutional Monarchy','Phnom Penh'),('CMR','Cameroon','Africa','Central Africa','1960','Cameroun/Cameroon','Republic','Yaounde'),('CAN','Canada','North America','North America','1867','Canada','Constitutional Monarchy, Federation','Ottawa'),('CPV','Cape Verde','Africa','Western Africa','1975','Cabo Verde','Republic','Praia'),('KAZ','Kazakhstan','Asia','Southern and Central Asia','1991','Qazaqstan','Republic','Astana'),('KEN','Kenya','Africa','Eastern Africa','1963','Kenya','Republic','Nairobi'),('CAF','Central African Republic','Africa','Central Africa','1960','Centrafrique/Be-Afrika','Republic','Bangui'),('CHN','China','Asia','Eastern Asia','-1523','Zhongquo',"People'sRepublic",'Beijing'),('KGZ','Kyrgyzstan','Asia','Southern and Central Asia','1991','Kyrgyzstan','Republic','Bishkek'),('KIR','Kiribati','Oceania','Micronesia','1979','Kiribati','Republic','Tarawa'),('COL','Colombia','South America','South America','1810','Colombia','Republic','Bogota'),('COM','Comoros','Africa','Eastern Africa','1975','Komori/Comores','Republic','Moroni'),('COG','Congo','Africa','Central Africa','1960','Congo','Republic','Brazzaville'),('COD','Congo, The Democratic Republic of the','Africa','Central Africa','1960','Republique Democratique du Congo','Republic','Kinshasa'),('PRK','North Korea','Asia','Eastern Asia','1948','Choson Minjujuui In´min Konghwaguk (Bukhan)','Socialistic Republic','Pyongyang'),('KOR','South Korea','Asia','Eastern Asia','1948','Taehan Min\x92guk (Namhan)','Republic','Seoul'),('GRC','Greece','Europe','Southern Europe','1830','Ellada','Republic','Athens'),('HRV','Croatia','Europe','Southern Europe','1991','Hrvatska','Republic','Zagreb'),('CUB','Cuba','North America','Caribbean','1902','Cuba','Socialistic Republic','Havana'),('KWT','Kuwait','Asia','Middle East','1961','Al-Kuwayt','Constitutional Monarchy (Emirate)','Kuwait City'),('CYP','Cyprus','Asia','Middle East','1960','Kypros/Kibris','Republic','Nicosia'),('LAO','Laos','Asia','Southeast Asia','1953','Lao','Republic','Vientiane'),('LVA','Latvia','Europe','Baltic Countries','1991','Latvija','Republic','Riga'),('LSO','Lesotho','Africa','Southern Africa','1966','Lesotho','Constitutional Monarchy','Maseru'),('LBN','Lebanon','Asia','Middle East','1941','Lubnan','Republic','Beirut'),('LBR','Liberia','Africa','Western Africa','1847','Liberia','Republic','Monrovia'),('LBY','Libya','Africa','Northern Africa','1951','Libiya','Socialistic State','Tripoli'),('LIE','Liechtenstein','Europe','Western Europe','1806','Liechtenstein','Constitutional Monarchy','Vaduz'),('LTU','Lithuania','Europe','Baltic Countries','1991','Lietuva','Republic','Vilnius'),('LUX','Luxembourg','Europe','Western Europe','1867','Luxembourg/Letzebuerg','Constitutional Monarchy','Luxembourg'),('MAC','Macao','Asia','Eastern Asia', None,'Macau/Aomen','Special Administrative Region of China', None),('MDG','Madagascar','Africa','Eastern Africa','1960','Madagasikara/Madagascar','Federal Republic','Antananarivo'),('MKD','Macedonia','Europe','Southern Europe','1991','Makedonija','Republic','Skopje'),('MWI','Malawi','Africa','Eastern Africa','1964','Malawi','Republic','Lilongwe'),('MDV','Maldives','Asia','Southern and Central Asia','1965','Dhivehi Raajje/Maldives','Republic','Male'),('MYS','Malaysia','Asia','Southeast Asia','1957','Malaysia','Constitutional Monarchy, Federation','Kuala Lumpur'),('MLI','Mali','Africa','Western Africa','1960','Mali','Republic','Bamako'),('MLT','Malta','Europe','Southern Europe','1964','Malta','Republic','Valletta'),('MAR','Morocco','Africa','Northern Africa','1956','Al-Maghrib','Constitutional Monarchy','Rabat'),('MHL','Marshall Islands','Oceania','Micronesia','1990','Marshall Islands/Majol','Republic','Majuro'),('MRT','Mauritania','Africa','Western Africa','1960','Muritaniya/Mauritanie','Republic','Nouakchott'),('MUS','Mauritius','Africa','Eastern Africa','1968','Mauritius','Republic','Port Louis'),('MEX','Mexico','North America','Central America','1810','Mexico','Federal Republic','Mexico City'),('FSM','Micronesia, Federated States of','Oceania','Micronesia','1990','Micronesia','Federal Republic','Palikir'),('MDA','Moldova','Europe','Eastern Europe','1991','Moldova','Republic','Chisinau'),('MCO','Monaco','Europe','Western Europe','1861','Monaco','Constitutional Monarchy','Monaco'),('MNG','Mongolia','Asia','Eastern Asia','1921','Mongol Uls','Republic','Ulaanbaatar'),('MOZ','Mozambique','Africa','Eastern Africa','1975','Mocambique','Republic','Maputo'),('MMR','Myanmar','Asia','Southeast Asia','1948','Myanma Pye','Republic','Naypyidaw'),('NAM','Namibia','Africa','Southern Africa','1990','Namibia','Republic','Windhoek'),('NRU','Nauru','Oceania','Micronesia','1968','Naoero/Nauru','Republic','Yaren District'),('NPL','Nepal','Asia','Southern and Central Asia','1769','Nepal','Constitutional Monarchy','Kathmandu'),('NIC','Nicaragua','North America','Central America','1838','Nicaragua','Republic','Managua'),('NER','Niger','Africa','Western Africa','1960','Niger','Republic','Niamey'),('NGA','Nigeria','Africa','Western Africa','1960','Nigeria','Federal Republic','Abuja'),('NOR','Norway','Europe','Nordic Countries','1905','Norge','Constitutional Monarchy','Oslo'),('CIV',"Cote d'Ivoire",'Africa','Western Africa','1960','Cote d\x92Ivoire','Republic','Yamoussoukro'),('OMN','Oman','Asia','Middle East','1951','´Uman','Monarchy (Sultanate)','Muscat'),('PAK','Pakistan','Asia','Southern and Central Asia','1947','Pakistan','Republic','Islamabad'),('PLW','Palau','Oceania','Micronesia','1994','Belau/Palau','Republic','Koror'),('PAN','Panama','North America','Central America','1903','Panama','Republic','Panama City'),('PNG','Papua New Guinea','Oceania','Melanesia','1975','Papua New Guinea/Papua Niugini','Constitutional Monarchy','Port Moresby'),('PRY','Paraguay','South America','South America','1811','Paraguay','Republic','Asuncion'),('PER','Peru','South America','South America','1821','Peru/Piruw','Republic','Lima'),('MNP','Northern Mariana Islands','Oceania','Micronesia', None,'Northern Mariana Islands','Commonwealth of the US','Saipan'),('PRT','Portugal','Europe','Southern Europe','1143','Portugal','Republic','Lisbon'),('PRI','Puerto Rico','North America','Caribbean', None,'Puerto Rico','Commonwealth of the US','San Juan'),('POL','Poland','Europe','Eastern Europe','1918','Polska','Republic','Warsaw'),('GNQ','Equatorial Guinea','Africa','Central Africa','1968','Guinea Ecuatorial','Republic','Malabo'),('QAT','Qatar','Asia','Middle East','1971','Qatar','Monarchy','Doha'),('FRA','France','Europe','Western Europe','843','France','Republic','Paris'),('PYF','French Polynesia','Oceania','Polynesia', None,'Polynesie francaise','Nonmetropolitan Territory of France','Papeete'),('RWA','Rwanda','Africa','Eastern Africa','1962','Rwanda/Urwanda','Republic','Kigali'),('SWE','Sweden','Europe','Nordic Countries','836','Sverige','Constitutional Monarchy','Stockholm'),('KNA','Saint Kitts and Nevis','North America','Caribbean','1983','Saint Kitts and Nevis','Constitutional Monarchy','Basseterre'),('LCA','Saint Lucia','North America','Caribbean','1979','Saint Lucia','Constitutional Monarchy','Castries'),('VCT','Saint Vincent and the Grenadines','North America','Caribbean','1979','Saint Vincent and the Grenadines','Constitutional Monarchy','Kingstown'),('DEU','Germany','Europe','Western Europe','1955','Deutschland','Federal Republic','Berlin'),('SLB','Solomon Islands','Oceania','Melanesia','1978','Solomon Islands','Constitutional Monarchy','Honiara'),('ZMB','Zambia','Africa','Eastern Africa','1964','Zambia','Republic','Lusaka'),('WSM','Samoa','Oceania','Polynesia','1962','Samoa','Parlementary Monarchy','Apia'),('SMR','San Marino','Europe','Southern Europe','885','San Marino','Republic','San Marino'),('STP','Sao Tome and Principe','Africa','Central Africa','1975','Sao Tome e Principe','Republic','Sao Tome'),('SAU','Saudi Arabia','Asia','Middle East','1932','Al-´Arabiya as-Sa´udiya','Monarchy','Riyadh'),('SEN','Senegal','Africa','Western Africa','1960','Senegal/Sounougal','Republic','Dakar'),('SYC','Seychelles','Africa','Eastern Africa','1976','Sesel/Seychelles','Republic','Victoria'),('SLE','Sierra Leone','Africa','Western Africa','1961','Sierra Leone','Republic','Freetown'),('SGP','Singapore','Asia','Southeast Asia','1965','Singapore/Singapura/Xinjiapo/Singapur','Republic','Singapore'),('SVK','Slovakia','Europe','Eastern Europe','1993','Slovensko','Republic','Bratislava'),('SVN','Slovenia','Europe','Southern Europe','1991','Slovenija','Republic','Ljubljana'),('SOM','Somalia','Africa','Eastern Africa','1960','Soomaaliya','Republic','Mogadishu'),('LKA','Sri Lanka','Asia','Southern and Central Asia','1948','Sri Lanka/Ilankai','Republic','Colombo'),('SDN','Sudan','Africa','Northern Africa','1956','As-Sudan','Islamic Republic','Khartoum'),('FIN','Finland','Europe','Nordic Countries','1917','Suomi','Republic','Helsinki'),('SUR','Suriname','South America','South America','1975','Suriname','Republic','Paramaribo'),('SWZ','Swaziland','Africa','Southern Africa','1968','kaNgwane','Monarchy','Mbabane'),('CHE','Switzerland','Europe','Western Europe','1499','Schweiz/Suisse/Svizzera/Svizra','Federation','Bern'),('SYR','Syria','Asia','Middle East','1941','Suriya','Republic','Damascus'),('TJK','Tajikistan','Asia','Southern and Central Asia','1991','Tocikiston','Republic','Dushanbe'),('TZA','Tanzania','Africa','Eastern Africa','1961','Tanzania','Republic','Dodoma'),('DNK','Denmark','Europe','Nordic Countries','800','Danmark','Constitutional Monarchy','Copenhagen'),('THA','Thailand','Asia','Southeast Asia','1350','Prathet Thai','Constitutional Monarchy','Bangkok'),('TGO','Togo','Africa','Western Africa','1960','Togo','Republic','Lome'),('TON','Tonga','Oceania','Polynesia','1970','Tonga','Monarchy',"Nuku'alofa"),('TTO','Trinidad and Tobago','North America','Caribbean','1962','Trinidad and Tobago','Republic','Port-of-Spain'),('TCD','Chad','Africa','Central Africa','1960','Tchad/Tshad','Republic',"N'Djamena"),('CZE','Czech Republic','Europe','Eastern Europe','1993','¸esko','Republic','Prague'),('TUN','Tunisia','Africa','Northern Africa','1956','Tunis/Tunisie','Republic','Tunis'),('TUR','Turkey','Asia','Middle East','1923','Turkiye','Republic','Ankara'),('TKM','Turkmenistan','Asia','Southern and Central Asia','1991','Turkmenostan','Republic','Ashgabat'),('TCA','Turks and Caicos Islands','North America','Caribbean', None,'The Turks and Caicos Islands','Dependent Territory of the UK','Grand Turk'),('TUV','Tuvalu','Oceania','Polynesia','1978','Tuvalu','Constitutional Monarchy','Funafuti'),('UGA','Uganda','Africa','Eastern Africa','1962','Uganda','Republic','Kampala'),('UKR','Ukraine','Europe','Eastern Europe','1991','Ukrajina','Republic','Kiev'),('HUN','Hungary','Europe','Eastern Europe','1918','Magyarorszag','Republic','Budapest'),('URY','Uruguay','South America','South America','1828','Uruguay','Republic','Montevideo'),('NCL','New Caledonia','Oceania','Melanesia', None,'Nouvelle-Caledonie','Nonmetropolitan Territory of France',"Noum'ea"),('NZL','New Zealand','Oceania','Australia and New Zealand','1907','New Zealand/Aotearoa','Constitutional Monarchy','Wellington'),('UZB','Uzbekistan','Asia','Southern and Central Asia','1991','Uzbekiston','Republic','Tashkent'),('BLR','Belarus','Europe','Eastern Europe','1991','Belarus','Republic','Minsk'),('VUT','Vanuatu','Oceania','Melanesia','1980','Vanuatu','Republic','Port-Vila'),('VEN','Venezuela','South America','South America','1811','Venezuela','Federal Republic','Caracas'),('RUS','Russian Federation','Europe','Eastern Europe','1991','Rossija','Federal Republic','Moscow'),('VNM','Vietnam','Asia','Southeast Asia','1945','Viet Nam','Socialistic Republic','Hanoi'),('EST','Estonia','Europe','Baltic Countries','1991','Eesti','Republic','Tallinn'),('USA','United States','North America','North America','1776','United States','Federal Republic','Washington D.C.'),('VIR','Virgin Islands, U.S.','North America','Caribbean', None,'Virgin Islands of the United States','US Territory','Charlotte Amalie'),('ZWE','Zimbabwe','Africa','Eastern Africa','1980','Zimbabwe','Republic','Harare'),('PSE','Palestine','Asia','Middle East', None,'Filastin','Autonomous Area', None)]संचालित द्वारा
आप fetchall() मेथड के आउटपुट को प्रत्येक पंक्ति पर इटररेट करके थोड़ा और सुगठित बना सकते हैं -
for row in cur.execute('SELECT * FROM countries'):print(row)संचालित द्वारा
('AFG','Afghanistan','Asia','Southern and Central Asia','1919','Afganistan/Afqanestan','Islamic Emirate','Kabul')('NLD','Netherlands','Europe','Western Europe','1581','Nederland','Constitutional Monarchy','Amsterdam')('ALB','Albania','Europe','Southern Europe','1912','Shqiperia','Republic','Tirane')...('USA','United States','North America','North America','1776','United States','Federal Republic','Washington D.C.')('VIR','Virgin Islands, U.S.','North America','Caribbean', None,'Virgin Islands of the United States','US Territory','Charlotte Amalie')('ZWE','Zimbabwe','Africa','Eastern Africa','1980','Zimbabwe','Republic','Harare')('PSE','Palestine','Asia','Middle East', None,'Filastin','Autonomous Area', None)संचालित द्वारा
अब देखते हैं कि आप क्वेरी में where क्लॉज़ कैसे जोड़ते हैं और उसे निष्पादित करते हैं। वह देश निकालते हैं जहाँ code = 'AFG' हो।
code =('AFG',)
cur.execute('SELECT * FROM countries WHERE code = ?', code)print(cur.fetchone())संचालित द्वारा
('AFG','Afghanistan','Asia','Southern and Central Asia','1919','Afganistan/Afqanestan','Islamic Emirate','Kabul')संचालित द्वारा
रिकॉर्ड प्राप्त करने के लिए आप निम्न तरीका भी अपना सकते थे, लेकिन ऊपर वाला अधिक सुरक्षित है।
code ='AFG'
cur.execute("SELECT * FROM countries WHERE code = '%s'"% code)print(cur.fetchone())संचालित द्वारा
('AFG','Afghanistan','Asia','Southern and Central Asia','1919','Afganistan/Afqanestan','Islamic Emirate','Kabul')संचालित द्वारा
आप किसी टेबल में रिकॉर्ड एक-एक करके या एक साथ कई रिकॉर्ड भी डाल सकते हैं। इसके लिए, consumers टेबल का उपयोग करते हैं। इसमें अभी तक कोई रिकॉर्ड नहीं है। इसे यहाँ से भरते हैं।
# One by one
cur.execute("INSERT INTO consumers VALUES (1,'John Doe','[email protected]','A')")for row in cur.execute('SELECT * FROM consumers'):print(row)संचालित द्वारा
# Prepare a list of records to be inserted
purchases =[(2,'John Paul','[email protected]','B'),(3,'Chris Paul','[email protected]','A'),]# Use executemany() to insert multiple records at a time
cur.executemany('INSERT INTO consumers VALUES (?,?,?,?)', purchases)for row in cur.execute('SELECT * FROM consumers'):print(row)संचालित द्वारा
आप इसे DB Browser टूल से भी क्रॉस-चेक कर सकते हैं, वहाँ भी रिकॉर्ड दिखने चाहिए। यह तब तक नहीं होगा जब तक आप इन ट्रांजैक्शन्स को कमिट नहीं करते। आप अपने बनाए हुए Connection ऑब्जेक्ट की commit() मेथड कॉल करके इसे सेव/कमिट कर सकते हैं।
काम पूरा होने के बाद DB कनेक्शन बंद करना अच्छा प्रोग्रामिंग अभ्यास है। लेकिन उससे पहले, बदलावों को स्थायी करना ज़रूरी है, जो ऊपर दिखाए गए commit() मेथड के उपयोग से किया जाता है।
पूरे ट्यूटोरियल को पढ़ने के लिए धन्यवाद। इस ट्यूटोरियल में आपने SQLite, एक शक्तिशाली लेकिन हल्का RDBMS, का परिचय देखा और Python का उपयोग करके SQLite के साथ इंटरैक्ट करना सीखा। यदि आपके कोई प्रश्न हों, तो उन्हें टिप्पणियों में बताएँ।
रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) बेहद लोकप्रिय हैं और एप्लिकेशन डेवलपमेंट का अभिन्न हिस्सा हैं। कई अलग-अलग RDBMS मौजूद हैं, जैसे MySQL, PostgreSQL, IBM DB2, Oracle 11g इत्यादि। ऐसा ही एक RDBMS है SQLite। SQLite व्यापक रूप से उपयोग किया जाता है और कई कारणों से डेवलपर्स का पसंदीदा है -
हालाँकि, SQLite की कुछ सीमाएँ भी हैं। उदाहरण के लिए, यह
RIGHT OUTER JOINऔरFULL OUTER JOINजैसे जोइन्स को सपोर्ट नहीं करता। लेकिन इसके फ़ायदे इसकी सीमाओं से कहीं अधिक हैं। इस ट्यूटोरियल में, आप Python में SQLite का उपयोग करना सीखेंगे, और इसमें शामिल विषयों का संक्षिप्त विवरण नीचे दिया गया है -नोट: यह ट्यूटोरियल मानकर चलता है कि आप SQL (किसी भी RDBMS के साथ) और Python (3) की बुनियादी जानकारी से पहले से परिचित हैं। यदि आप इन कौशलों को फिर से ताज़ा करना चाहते हैं, तो निम्न संसाधन उपयोगी हो सकते हैं -
जब आपको SQL और Python के साथ काम करने में सहजता महसूस हो, तो आप वापस आकर यहीं से आगे बढ़ सकते हैं।
इंस्टॉलेशन और सेटअप
SQLite को इंस्टॉल और सेटअप करना कुछ ही मिनटों का काम है। आप कमांड लाइन टूल्स से SQLite का उपयोग कर सकते हैं, लेकिन एक GUI-आधारित यूटिलिटी भी है जो एक अच्छे ग्राफ़िकल इंटरफ़ेस के माध्यम से SQLite का उपयोग करने देती है। इस ट्यूटोरियल के लिए, आप DB Browser for SQLite का उपयोग करेंगे। शुरुआत करने के लिए, अपने OS प्लेटफ़ॉर्म के अनुरूप इस टूल को यहाँ से डाउनलोड करें।
Windows 7 प्लेटफ़ॉर्म पर, DB Browser for SQLite का इंटरफ़ेस इस तरह दिखता है -
डेटाबेस और टेबल बनाना
DB Browser टूल तैयार होने के बाद, आप आगे बढ़ने के लिए एक नया SQLite डेटाबेस बना सकते हैं। इसके लिए, आप New Database टैब पर क्लिक कर सकते हैं -
New Database टैब पर क्लिक करने के बाद, आपसे डेटाबेस का नाम दर्ज करने के लिए कहा जाएगा। अपनी पसंद का नाम दें और आगे बढ़ें। आपके दिए गए नाम का एक खाली डेटाबेस तुरंत बन जाएगा, और फिर आपसे उस डेटाबेस के अंतर्गत एक टेबल बनाने के लिए कहा जाएगा। अभी आप टेबल बनाने का भाग छोड़ सकते हैं; जल्द ही आप इस पर आएँगे।
टेबल बनाने के लिए, आपको टेबल की स्कीमा तय करनी होगी। इस ट्यूटोरियल और समझ के उद्देश्य से, पहले एक सरल टेबल consumers बनाते हैं, जिसमें निम्न फ़ील्ड और डेटा-टाइप होंगे -
नोट: यदि आप डेटाबेस स्कीमा डिज़ाइनिंग से परिचित हैं, तो आपको याद होगा कि consumer_id फ़ील्ड इस टेबल की प्राइमरी की है (इसीलिए यह रेखांकित है)।
टेबल बनाने के लिए, Create Table टैब पर क्लिक करें और आपको वह विवरण दर्ज करने के लिए कहा जाएगा जो आप अपनी टेबल के लिए चाहते हैं -
यदि आप ऊपर दिए गए चित्र को ध्यान से देखें, तो पाएँगे कि इसमें वही सटीक विवरण हैं जिन्हें आप consumers टेबल में सम्मिलित करना चाहते थे। आप टेबल बनाने के लिए संबंधित SQL भी देख सकते हैं। DB Browser टूल यह काम बहुत कुशलता से कर देता है। यह करने के बाद, OK बटन पर क्लिक करें और कुछ देर पहले बनाए गए डेटाबेस के अंतर्गत consumers टेबल दिखाई देनी चाहिए -
sqlite_sequence टेबल इसलिए है क्योंकि यदि आपने
consumer_idफ़ील्ड को ऑटो-इन्क्रिमेंटेड बताया है, तो SQLite सीक्वेंस बनाए रखने के लिए अलग टेबल बनाता है। आप Execute SQL सेक्शन में जाकर अन्य SQL क्वेरी भी चला सकते हैं। अपनी पसंदीदा SQL क्वेरी चलाने के लिए स्वतंत्र महसूस करें।अब Python का उपयोग कर SQLite डेटाबेस के साथ इंटरैक्ट करने से पहले, देखते हैं कि .csv फ़ाइल को SQLite डेटाबेस में कैसे इंपोर्ट करें और विश्लेषण में उपयोग करें।
एक .csv फ़ाइल को SQLite डेटाबेस में इंपोर्ट करना
आपके द्वारा बनाए गए डेटाबेस में .csv फ़ाइल इंपोर्ट करने के लिए, बस यह नेविगेशन अपनाएँ: File -> Import -> Table from CSV file। इस उद्देश्य के लिए आप कोई भी .csv फ़ाइल उपयोग कर सकते हैं। हमारे उदाहरण में इसमें दुनिया भर के विभिन्न देशों के विवरण हैं। हम फ़ाइल तक नेविगेट करते हैं और उसके बाद नीचे जैसा डायलॉग बॉक्स दिखता है -
DB Browser यहाँ कई बातें निर्दिष्ट करने देता है, जिनमें टेबल के नाम भी शामिल हैं। सुनिश्चित करें कि आप Column names in the first line विकल्प को चेक करें ताकि SQLite कॉलम नाम स्वतः निकाल सके। विशिष्टताएँ तय करने के बाद OK पर क्लिक करें।
हमारे उदाहरण में, हमें टेबल के लिए एक प्रविष्टि दिखनी चाहिए -
कुछ
selectक्वेरी चलाकर देखें कि टेबल सही से इंपोर्ट हुई है या नहीं।Python में SQLite
अब आपके पास काम करने के लिए एक डेटाबेस और एक टेबल तैयार है। Python के ज़रिए SQLite डेटाबेस के साथ इंटरैक्ट करने के लिए, आपको sqlite3 मॉड्यूल की आवश्यकता होगी, जो Anaconda डिस्ट्रीब्यूशन के साथ आता है।
अब, आप
sqlite3द्वारा प्रदान की गईconnect()विधि का उपयोग करके बनाए गए डेटाबेस से कनेक्ट करेंगे। यह एकConnectionऑब्जेक्ट लौटाता है।connectमेथड को डेटाबेस का पथ दें। डेटाबेस आमतौर पर.dbएक्सटेंशन में सेव होते हैं।एक बार जब आपके पास डेटाबेस के लिए
Connectionहो, तो आप एकCursorऑब्जेक्ट बना सकते हैं और उसकेexecute()मेथड को कॉल करके SQL कमांड चला सकते हैं।SELECTस्टेटमेंट चलाने के बाद, आप -curको एक इटररेटर की तरह ट्रीट कर सकते हैं और एक पंक्ति दिखाने के लिएfetchone()मेथड कॉल कर सकते हैं याfetchall()मेथड कॉल कर सकते हैंआइए दोनों को एक-एक करके आज़माते हैं।
आप
fetchall()मेथड के आउटपुट को प्रत्येक पंक्ति पर इटररेट करके थोड़ा और सुगठित बना सकते हैं -अब देखते हैं कि आप क्वेरी में
whereक्लॉज़ कैसे जोड़ते हैं और उसे निष्पादित करते हैं। वह देश निकालते हैं जहाँcode = 'AFG'हो।रिकॉर्ड प्राप्त करने के लिए आप निम्न तरीका भी अपना सकते थे, लेकिन ऊपर वाला अधिक सुरक्षित है।
आप किसी टेबल में रिकॉर्ड एक-एक करके या एक साथ कई रिकॉर्ड भी डाल सकते हैं। इसके लिए,
consumersटेबल का उपयोग करते हैं। इसमें अभी तक कोई रिकॉर्ड नहीं है। इसे यहाँ से भरते हैं।आप इसे DB Browser टूल से भी क्रॉस-चेक कर सकते हैं, वहाँ भी रिकॉर्ड दिखने चाहिए। यह तब तक नहीं होगा जब तक आप इन ट्रांजैक्शन्स को कमिट नहीं करते। आप अपने बनाए हुए
Connectionऑब्जेक्ट कीcommit()मेथड कॉल करके इसे सेव/कमिट कर सकते हैं।अब आपको प्रविष्टियाँ दिखनी चाहिए -
काम पूरा होने के बाद DB कनेक्शन बंद करना अच्छा प्रोग्रामिंग अभ्यास है। लेकिन उससे पहले, बदलावों को स्थायी करना ज़रूरी है, जो ऊपर दिखाए गए
commit()मेथड के उपयोग से किया जाता है।बधाई!
पूरे ट्यूटोरियल को पढ़ने के लिए धन्यवाद। इस ट्यूटोरियल में आपने SQLite, एक शक्तिशाली लेकिन हल्का RDBMS, का परिचय देखा और Python का उपयोग करके SQLite के साथ इंटरैक्ट करना सीखा। यदि आपके कोई प्रश्न हों, तो उन्हें टिप्पणियों में बताएँ।
यदि आप Python में डेटाबेस के साथ इंटरैक्ट करने के बारे में और सीखना चाहते हैं, तो DataCamp का Introduction to Databases in Python कोर्स करें। हमारा Beginners Guide to SQLite ट्यूटोरियल भी देखें।