Python 中的 MySQL 查询——初学者指南

在本文中,我们将学习怎样在 Python 中运行 MySQL 查询。 许多 Web 应用程序是使用 Flask 或 Django 框架开发的,这些应用程序可以由各种数据库组成,具体取决于客户端的用例。

Python 的特别之处在于它可以轻松集成一些基础数据库,如 SQLite 数据库或 Postgresql 和 SQLAlchemy。

因此,为了利用 Python 语言的这一功能,我们将学习一些基本的 SQL 操作并使用 Python 脚本开发一个小型数据库。

目录

快速总结

在本教程中,我们将学习一些基本的 SQL 查询,并学习怎样在 Python 中使用 SQL。 我们将通过 CREATE DATABASE、CREATE TABLE、SELECT、UPDATE、INSERT INTO、DELETE 等查询。

我们还将介绍一些基本的 Python 表达式,这些表达式可用于使用 Python 脚本集成和管理 SQL。 最后,我们将通过开发一个小型 Python 程序来结束,该程序将输入一个包含一些数据的 XML 文件,并将该数据转换为有意义的结构化 SQL 数据库

基本 SQL 查询

SQL有助于以下 CRUD 操作

  • C: 创建
  • 回复:
  • 在: 更新
  • 丁: 删除

现在让我们讨论一些最重要的导入 SQL 查询。

1. 创建数据库

此查询用于创建一个数据库,您可以在该数据库下构建您的表。

例子:

 CREATE DATABASE [IF NOT EXISTS] database_name

笔记: [IF NOT EXISTS] 用于检查以避免重新创建数据库并丢失存储在其中的数据。

2. 创建表

此查询用于创建表。

例子:

CREATE TABLE [IF NOT EXISTS] table_name

3. 插入

该查询用于向表中插入一些数据

例子:

INSERT INTO Users(column_1, column_2) VALUES (value_1, value_2)

4. 选择

此查询用于从表中提取/选择一些数据

例子:

SELECT id FROM Genre WHERE name = genre

在这里,我们从“流派”表中选择“id”列,其中名称列 =“Some_Value”

5.更新

此查询用于更新表中先前插入的某些条目

例子:

UPDATE table_name SET (column_1, column_2) VALUES (value_1, value_2)

6. 删除

此查询用于从表中删除一些数据

例子:

DELETE FROM table_name WHERE condition

怎样在 Python 中运行 MySQL 查询

SQLite3 库已经存在,它允许在 Python 中使用 SQL,该库包含一些最常见和最重要的函数,可帮助我们通过 Python 脚本管理数据库。

import sqlite3

conn = sqlite3.connect('trackdb.sqlite')
cur = conn.cursor()

这里的 import 语句导入 sqlite3 库。 conn 就像我们的数据库之间的连接,这里使用函数建立连接:connect(‘database path’)。 在这种情况下,数据库的名称是“trackdb.sqlite”,它位于 python 脚本所在的同一目录中

现在当连接成功建立后,我们就可以开始在我们的程序中执行 SQL 查询甚至 SQL 脚本了。 这可以通过以下函数来完成:

  1. 执行脚本(’sql_script’):此函数将 SQL 脚本字符串作为输入,并且大多数情况下并执行整个 SQL 脚本此函数用于定义数据库的架构
  2. 执行(’sql_query’):此函数将单个 SQL 查询作为输入并执行它。 该函数主要用于执行更新、删除、读取等操作。

在 Python 中运行 MySQL 查询的示例代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import sqlite3

conn = sqlite3.connect('trackdb.sqlite')
cur = conn.cursor()

# Make some fresh tables using executescript()

cur.executescript('''
DROP TABLE IF EXISTS Artist;
DROP TABLE IF EXISTS Genre;
DROP TABLE IF EXISTS Album;
DROP TABLE IF EXISTS Track;

CREATE TABLE Artist (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    name TEXT UNIQUE
);

CREATE TABLE Genre (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    name TEXT UNIQUE
);

CREATE TABLE Album (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    artist_id INTEGER,
    title TEXT UNIQUE
);

CREATE TABLE Track (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    title TEXT UNIQUE,
    album_id INTEGER,
    genre_id INTEGER,
    len INTEGER,
    rating INTEGER,
    count INTEGER
);
''')

fname = input('Enter file name: ')
if len(fname) < 1:
    fname="Library.xml"


# <key>Track ID</key><integer>369</integer>
# <key>Name</key><string>Another One Bites The Dust</string>
# <key>Artist</key><string>Queen</string>

def lookup(d, key):
    found = False
    for child in d:
        if found:
            return child.text
        if child.tag == 'key' and child.text == key:
            found = True
    return None


stuff = ET.parse(fname)
all = stuff.findall('dict/dict/dict')
print ('Dict count:', len(all))
for entry in all:
    if lookup(entry, 'Track ID') is None:
        continue

    name = lookup(entry, 'Name')
    artist = lookup(entry, 'Artist')
    album = lookup(entry, 'Album')
    count = lookup(entry, 'Play Count')
    rating = lookup(entry, 'Rating')
    length = lookup(entry, 'Total Time')
    genre = lookup(entry, 'Genre')

    if name is None or artist is None or album is None:
        continue

    print (
        name,
        artist,
        album,
        count,
        rating,
        length,
        genre,
        )

    cur.execute('INSERT OR IGNORE INTO Artist (name) VALUES ( ? )',
                (artist, ))
    cur.execute('SELECT id FROM Artist WHERE name = ? ', (artist, ))
    artist_id = cur.fetchone()[0]

    cur.execute('INSERT OR IGNORE INTO Album (title, artist_id) VALUES ( ?, ? )'
                , (album, artist_id))
    cur.execute('SELECT id FROM Album WHERE title = ? ', (album, ))
    album_id = cur.fetchone()[0]

    cur.execute('INSERT OR IGNORE INTO Genre (name) VALUES ( ?)',
                (genre, ))
    cur.execute('SELECT id FROM Genre WHERE name = ? ', (genre, ))
    genre_id = cur.fetchone()[0]

    cur.execute('INSERT OR REPLACE INTO Track (title, album_id, len, rating, count, genre_id) VALUES ( ?, ?, ?, ?, ? , ?)'
                , (
        name,
        album_id,
        length,
        rating,
        count,
        genre_id,
        ))

    conn.commit()

输入

Python 脚本的库 Xml

输出

数据库专辑表内容
数据库轨道表内容数据库轨道表内容

结论

在本文中,我们学习了怎样使用基本的 SQL 查询、它们的用法、语法和它们的操作。 我们进一步开发了一个 Python 脚本,演示了这些查询在 Python 中的执行和使用。 我们学会了所有 4 CRUD(创建、读取、更新和删除)操作和一点点怎样在 Python 中使用 sqlite3 模块

参考文献

要了解更多关于在 Python 中使用 SQL 的信息,可以参考以下链接:

https://docs.microsoft.com/en-us/sql/machine-learning/tutorials/quickstart-python-create-script?view=sql-server-ver15