每個 Python 開發人員都應該知道的 Python 中的頂級 SQL 查詢

已發表: 2021-01-29

SQL 代表結構化查詢語言,它有助於管理、操作和存儲關係數據庫。 關係數據庫包括以一種或另一種形式相關的表的集合。 多個表允許我們分離目標信息的不同實體,並避免數百列被合併在一個表中,這可能使管理數據庫變得困難。

它是一種查詢語言,而不是數據庫本身。 這些查詢可以在任何關係數據庫管理系統(如 Oracle、Microsoft SQL Server)上執行,但有一種 Python 方法來創建和執行 SQL 查詢。

目錄

SQLite3

這是 Python 內置庫,它允許我們創建輕量級數據庫,而無需運行實際的客戶端-服務器模型。 應用程序可以在內部使用它來存儲數據和執行 SQL 命令。 該軟件包易於使用,並允許在任何基於生產的數據庫(如 Postgresql)中復制相同的模式。 讓我們看看如何設置數據庫。

  • 標准進口聲明:

將 sqlite3 導入為 sq

該庫作為別名“sq”導入。

  • 現在,我們需要創建到數據庫的連接。 連接對象將用於此目的:

連接 = sq.connect(“example.db”)

如果之前沒有創建這個文件,那麼它將在執行這個命令後立即創建。

  • 要從數據庫訪問和獲取信息,需要創建一個游標對象。

游標 = 連接。游標()

現在基本設置已經完成,我們可以通過創建相應的表將數據推送到數據庫中,但在此之前,讓我們修改一些 SQL 命令。

SQL 中的基本命令

SQL 在英文可讀命令方面非常出色。 這些通常以大寫形式輸入,對此沒有限制。 通常這樣做是為了突出顯示查詢關鍵字,並且它們可以與表屬性區分開來。 但是現在我們有強大的 IDE 可以用不同的顏色突出顯示它們,任何方法都可以工作。

1.創建表

這允許您在數據庫中創建數據保存對象、表。 一個數據庫可以有許多具有一個或多個關係的表。 這些表的每一列都有標題,描述了它所包含的值。 創建表時,您需要指定列名、它將保存的數據類型和大小。 您可以添加其他屬性,例如列是否為主鍵、是否可以具有空值等。

可以將基本表創建為:

創建表 company_data (

id int,

名稱 varchar (24),

no_of_employee int

);

2. 選擇和從

顧名思義,它用於從表中選擇和獲取數據。 這是讓您查看數據的最重要步驟。 它類似於 Pandas 的頭部或尾部功能。

使用這些命令的簡單查詢如下所示:

SELECT <列名>

來自 <table_name>;

要從表中獲取所有列,您可以使用星號 (*) 代替所有列名。 LIMIT 關鍵字有助於定義最大行數。 考慮這個查詢:

選擇 *

來自 example_table

限制 5;

3. 在哪裡

where 子句用於指定查詢的附加條件。 您可以包括列的範圍、任何特定的比較或否定。

例如:

選擇客戶名稱,公司名稱

FROM company_data

WHERE company_name = 'upGrad';

4.插入

此子句用於將值添加到數據表中。 這些值的插入順序與在 create table 命令中將列名添加到表中的順序相同。 可以一次插入多行或一行。

例如,下面的查詢將 3 條記錄插入到表中:

INSERT INTO company_data (id, name, no_of_employees)

價值觀

(1, 'companyz_A', 100),

(2, '公司_B', 200),

(3, 'company_C', 500);

通過 Python 執行

現在您已經了解了這些命令,是時候在代碼中執行它們了。 到目前為止,我們已經連接到數據庫並創建了一個游標對象。 該對象將有助於在數據庫上執行命令:

cursor.execute(''' <QUERY> ''')

查詢作為字符串傳遞,並在三引號中。 在您提交此更改之前,此更改不會反映在數據庫中。 最後關閉與數據庫的連接可確保在此之後不會進行新的執行。

看看這個簡單的代碼:

將 sqlite3 導入為 sq

連接 = sq.connect(“example.db”)

游標 = 連接。游標()

光標.執行(“”

創建表表 1 (

id int,

名稱 varchar (24)

)

”')

光標.執行(“”

INSERT INTO table1 (id, name)

價值觀

(1, '升級'),

(2,“博客”)

”')

光標.執行(“”

選擇 *

從表 1

”')

連接.commit()

連接.close()

重要提示

1. 由於查詢是作為字符串傳遞的,使用 f-string 修改它們似乎是使程序動態和用戶控制的好選擇,但它可能會導致一些安全問題,例如 SQL 注入攻擊。 要避免這些,請使用佔位符“?” 無論您想替換查詢中的某些值的任何位置。 例如:

cursor.execute('“SELECT ? FROM ?''', col_name, table_name)

您可以要求用戶提供列名,該值將在此處替換。

2. 使用諸如 fetchone() 和 fetchall() 之類的函數來迭代結果。 Fetchone 返回查詢中的下一行,而 fetchall 返回游標獲取的所有行。 結果作為元組返回,因此它們不能被程序中的外部函數修改。

3. 如果要向數據庫添加批量值,則可以使用 executemany() 函數並傳遞包含要添加的值的元組列表。 例如:

to_add = [(1, 'hello') , (2, 'World')]

cursor.executemany('INSERT INTO table VALUES (?, ?)', to_add)

另請閱讀: Python 項目理念和主題

從世界頂級大學在線學習數據科學課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

SQL 是最受歡迎的數據庫語言,並且易於理解。 建議大多數數據科學初學者練習 SQL,因為它改進了數據檢索過程並讓您了解數據工程的執行方式。 它是任何數據庫操作的標準語言,並提供對數據庫的更快訪問。

如果您想了解數據科學,請查看 IIIT-B 和 upGrad 的數據科學 PG 文憑,該文憑專為在職專業人士而設,提供 10 多個案例研究和項目、實用的實踐研討會、與行業專家的指導、1-與行業導師面對面交流,400 多個小時的學習和頂級公司的工作協助。

您對 SQL 中的約束了解多少?

約束確定將在表中輸入的數據類型。 它們是在創建表期間指定的,可以應用於單個字段或多個字段。 SQL中的約束是:
NOT NULL - 防止在字段中輸入 NULL 值。
CHECK - 檢查字段中的所有值是否滿足給定條件。
DEFAULT - 如果未輸入任何值,則自動為字段分配默認值。
UNIQUE - 僅允許在字段中輸入唯一值。
INDEX- 索引一個字段,提供更快的記錄檢索。
PRIMARY KEY - 唯一標識表中的每條記錄。
FOREIGN KEY - 限制可能損害表之間鏈接的操作。

解釋索引及其類型?

索引或數據庫索引可以稱為特殊的查找表,它使數據檢索操作更快。 為了更快地搜索數據,它會消耗更多的內存和額外的寫入。 索引可以有 4 種類型:
1.唯一索引
2. 非唯一索引
3. 聚集索引

SQL 中的關係是什麼,它的類型是什麼?

多個實體或多個相互關聯的有形和無形對象之間的關係稱為關係。 SQL 中有 4 種類型的關係:
1. 一對一
2. 一對多/多對一
3.多對多
4. 自我參照關係。