自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不懂Python ORM操作MySQL和SQLite?別怕,跟我學(xué)吧!

數(shù)據(jù)庫 MySQL
SQL(Structured Query Language)是一種用于訪問和管理數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,它支持?jǐn)?shù)據(jù)的查詢、插入、更新和刪除等操作。SQL語言可以分為數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操作語言(DML)、數(shù)據(jù)控制語言(DCL)和數(shù)據(jù)查詢語言(DQL)等。

數(shù)據(jù)庫基礎(chǔ)概念

數(shù)據(jù)庫是一種用于存儲和管理數(shù)據(jù)的軟件系統(tǒng),它可以存儲和管理結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)等。數(shù)據(jù)庫中的數(shù)據(jù)通常以表格的形式組織,每個表格包含多個列和多個行。表格中的列定義了數(shù)據(jù)的類型和屬性,行表示實際的數(shù)據(jù)記錄。

SQL(Structured Query Language)是一種用于訪問和管理數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,它支持?jǐn)?shù)據(jù)的查詢、插入、更新和刪除等操作。SQL語言可以分為數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操作語言(DML)、數(shù)據(jù)控制語言(DCL)和數(shù)據(jù)查詢語言(DQL)等。

在Python中,我們可以使用各種庫和框架來操作和管理數(shù)據(jù)庫,例如使用MySQL、SQLite等關(guān)系型數(shù)據(jù)庫,使用MongoDB等非關(guān)系型數(shù)據(jù)庫,使用SQLAlchemy等ORM框架。

MySQL

MySQL是一種流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它支持多種操作系統(tǒng)和編程語言,并且具有高性能、可靠性和擴(kuò)展性等優(yōu)點。

在Python中,我們可以使用mysql-connector-python或pymysql等庫來連接和操作MySQL數(shù)據(jù)庫。

安裝MySQL

在使用MySQL之前,我們需要先安裝和配置MySQL。

在Linux系統(tǒng)中,可以使用以下命令來安裝MySQL:

sudo apt-get install mysql-server

在Windows系統(tǒng)中,可以從MySQL官網(wǎng)下載安裝程序進(jìn)行安裝。

安裝完成后,我們需要創(chuàng)建一個MySQL用戶,并為該用戶授權(quán)訪問數(shù)據(jù)庫??梢允褂靡韵旅顏韯?chuàng)建用戶和授權(quán):

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';

在上面的命令中,'username'和'password'分別表示要創(chuàng)建的MySQL用戶的用戶名和密碼。

連接MySQL

在Python中,可以使用mysql-connector-python或pymysql等庫來連接MySQL數(shù)據(jù)庫。

以下是一個使用mysql-connector-python連接MySQL數(shù)據(jù)庫的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password"
)

print(mydb)

在上面的示例中,我們創(chuàng)建了一個名為mydb的MySQL連接,并打印了該連接對象。

創(chuàng)建數(shù)據(jù)庫和表格

在MySQL中,可以使用CREATE DATABASE語句來創(chuàng)建數(shù)據(jù)庫,使用CREATE TABLE語句來創(chuàng)建表格。

以下是一個使用mysql-connector-python創(chuàng)建數(shù)據(jù)庫和表格的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE mydatabase")

mycursor.execute("USE mydatabase")

mycursor.execute("CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")

在上面的示例中,我們首先創(chuàng)建了一個名為mydatabase的數(shù)據(jù)庫,然后使用USE語句選擇該數(shù)據(jù)庫。接著,我們創(chuàng)建了一個名為customers的表格,其中包含三個列:id、name和address。

插入數(shù)據(jù)

在MySQL中,可以使用INSERT INTO語句向表格中插入數(shù)據(jù)。

以下是一個使用mysql-connector-python向表格中插入數(shù)據(jù)的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")

mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "record inserted.")

在上面的示例中,我們向customers表格中插入了一條記錄,其中包含name和address兩個列的值。

查詢數(shù)據(jù)

在MySQL中,可以使用SELECT語句查詢表格中的數(shù)據(jù)。

以下是一個使用mysql-connector-python查詢數(shù)據(jù)的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

在上面的示例中,我們使用SELECT語句查詢customers表格中的所有數(shù)據(jù),并使用fetchall方法獲取查詢結(jié)果。最后,我們使用for循環(huán)遍歷查詢結(jié)果并打印。

更新數(shù)據(jù)

在MySQL中,可以使用UPDATE語句更新表格中的數(shù)據(jù)。

以下是一個使用mysql-connector-python更新數(shù)據(jù)的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "UPDATE customers SET address = 'Canyon 123' WHERE name = 'John'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "record(s) affected")

在上面的示例中,我們使用UPDATE語句將customers表格中name為John的記錄的address列更新為Canyon 123。

刪除數(shù)據(jù)

在MySQL中,可以使用DELETE語句刪除表格中的數(shù)據(jù)。

以下是一個使用mysql-connector-python刪除數(shù)據(jù)的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="username",
  password="password",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE name = 'John'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "record(s) deleted")

在上面的示例中,我們使用DELETE語句刪除customers表格中name為John的記錄。

SQLite

SQLite是一種輕量級的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它不需要獨立的服務(wù)器進(jìn)程或系統(tǒng),數(shù)據(jù)存儲在本地文件中,適合于嵌入式設(shè)備和小型應(yīng)用程序等場景。

在Python中,我們可以使用sqlite3庫來連接和操作SQLite數(shù)據(jù)庫。

連接SQLite

以下是一個使用sqlite3連接SQLite數(shù)據(jù)庫的示例:

import sqlite3

conn = sqlite3.connect('example.db')

在上面的示例中,我們創(chuàng)建了一個名為example.db的SQLite連接。

創(chuàng)建表格

在SQLite中,可以使用CREATE TABLE語句創(chuàng)建表格。

以下是一個使用sqlite3創(chuàng)建表格的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute('''CREATE TABLE stocks
             (date text, trans text, symbol text, qty real, price real)''')

在上面的示例中,我們創(chuàng)建了一個名為stocks的表格,其中包含五個列:date、trans、symbol、qty和price。

插入數(shù)據(jù)

在SQLite中,可以使用INSERT INTO語句向表格中插入數(shù)據(jù)。

以下是一個使用sqlite3向表格中插入數(shù)據(jù)的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

conn.commit()

在上面的示例中,我們向stocks表格中插入了一條記錄,其中包含五個列的值。

查詢數(shù)據(jù)

在SQLite中,可以使用SELECT語句查詢表格中的數(shù)據(jù)。

以下是一個使用sqlite3查詢數(shù)據(jù)的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

for row in c.execute('SELECT * FROM stocks ORDER BY price'):
    print(row)

在上面的示例中,我們使用SELECT語句查詢stocks表格中的所有數(shù)據(jù),并按price列進(jìn)行排序。最后,我們使用for循環(huán)遍歷查詢結(jié)果并打印。

更新數(shù)據(jù)

在SQLite中,可以使用UPDATE語句更新表格中的數(shù)據(jù)。

以下是一個使用sqlite3更新數(shù)據(jù)的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute("UPDATE stocks SET qty = 200 WHERE symbol = 'RHAT'")

conn.commit()

print("Number of rows updated: ", conn.total_changes)

在上面的示例中,我們使用UPDATE語句將stocks表格中symbol為RHAT的記錄的qty列更新為200。

刪除數(shù)據(jù)

在SQLite中,可以使用DELETE語句刪除表格中的數(shù)據(jù)。

以下是一個使用sqlite3刪除數(shù)據(jù)的示例:

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute("DELETE FROM stocks WHERE symbol = 'RHAT'")

conn.commit()

print("Number of rows deleted: ", conn.total_changes)

在上面的示例中,我們使用DELETE語句刪除stocks表格中symbol為RHAT的記錄。

ORM框架

ORM(Object-Relational Mapping)框架是一種將對象模型和關(guān)系模型進(jìn)行映射的技術(shù),它可以將數(shù)據(jù)庫中的表格映射為Python中的類,將表格中的列映射為類的屬性,從而使得我們可以使用面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫。

在Python中,SQLAlchemy是一個流行的ORM框架,它支持多種關(guān)系型數(shù)據(jù)庫,包括MySQL、SQLite、PostgreSQL等。

安裝SQLAlchemy

在使用SQLAlchemy之前,我們需要先安裝SQLAlchemy。

可以使用以下命令來安裝SQLAlchemy:

pip install sqlalchemy

連接數(shù)據(jù)庫

在SQLAlchemy中,可以使用create_engine函數(shù)創(chuàng)建一個數(shù)據(jù)庫連接對象。

以下是一個使用SQLAlchemy連接MySQL數(shù)據(jù)庫的示例:

from sqlalchemy import create_engine

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")

在上面的示例中,我們創(chuàng)建了一個名為engine的MySQL連接對象。

以下是一個使用SQLAlchemy連接SQLite數(shù)據(jù)庫的示例:

from sqlalchemy import create_engine

engine = create_engine("sqlite:///example.db")

在上面的示例中,我們創(chuàng)建了一個名為engine的SQLite連接對象。

定義數(shù)據(jù)模型

在SQLAlchemy中,可以使用declarative_base函數(shù)定義一個基本的數(shù)據(jù)模型類,從而建立數(shù)據(jù)庫中表格和Python中類的映射關(guān)系。

以下是一個使用SQLAlchemy定義數(shù)據(jù)模型的示例:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class Customer(Base):
    __tablename__ = 'customers'

    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    address = Column(String(255))

在上面的示例中,我們定義了一個名為Customer的數(shù)據(jù)模型類,表示數(shù)據(jù)庫中的customers表格。該類繼承自Base類,其中包含三個屬性:id、name和address。

創(chuàng)建表格

在SQLAlchemy中,可以使用Base類的metadata屬性和create_all方法來創(chuàng)建表格。

以下是一個使用SQLAlchemy創(chuàng)建表格的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Base, Customer

Base.metadata.create_all(engine)

在上面的示例中,我們使用Base.metadata屬性和create_all方法創(chuàng)建了數(shù)據(jù)庫中的表格。其中,engine對象表示了連接到數(shù)據(jù)庫的引擎,Base類表示了數(shù)據(jù)模型類的基類,Customer類表示了要創(chuàng)建的數(shù)據(jù)模型類。

插入數(shù)據(jù)

在SQLAlchemy中,可以使用Session類和add方法向表格中插入數(shù)據(jù)。

以下是一個使用SQLAlchemy向表格中插入數(shù)據(jù)的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customer1 = Customer(name='John', address='Highway 21')
customer2 = Customer(name='Bob', address='Main Street')

session.add(customer1)
session.add(customer2)

session.commit()

session.close()

在上面的示例中,我們使用Session類創(chuàng)建了一個名為session的會話對象,然后創(chuàng)建了兩個名為customer1和customer2的Customer對象,并使用add方法將它們添加到會話對象中。最后,我們使用commit方法提交會話,并關(guān)閉會話對象。

查詢數(shù)據(jù)

在SQLAlchemy中,可以使用Session類和query方法查詢表格中的數(shù)據(jù)。

以下是一個使用SQLAlchemy查詢數(shù)據(jù)的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customers = session.query(Customer).all()

for customer in customers:
    print(customer.name, customer.address)

session.close()

在上面的示例中,我們使用Session類創(chuàng)建了一個名為session的會話對象,然后使用query方法查詢了customers表格中的所有數(shù)據(jù),并使用all方法獲取查詢結(jié)果。最后,我們使用for循環(huán)遍歷查詢結(jié)果并打印。注意,在使用SQLAlchemy查詢數(shù)據(jù)時,我們并沒有直接使用SQL語句,而是使用了Python的面向?qū)ο蠓绞健?/p>

更新數(shù)據(jù)

在SQLAlchemy中,可以使用Session類和commit方法更新表格中的數(shù)據(jù)。

以下是一個使用SQLAlchemy更新數(shù)據(jù)的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customer = session.query(Customer).filter_by(name='John').first()

customer.address = 'Highway 22'

session.commit()

session.close()

在上面的示例中,我們使用Session類創(chuàng)建了一個名為session的會話對象,然后使用query方法查詢了customers表格中name為John的數(shù)據(jù),并使用first方法獲取查詢結(jié)果的第一個元素。接著,我們將該元素的address屬性更新為'Highway 22',最后使用commit方法提交更新,并關(guān)閉會話對象。

刪除數(shù)據(jù)

在SQLAlchemy中,可以使用Session類和commit方法刪除表格中的數(shù)據(jù)。

以下是一個使用SQLAlchemy刪除數(shù)據(jù)的示例:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+mysqlconnector://username:password@localhost/mydatabase")
Session = sessionmaker(bind=engine)

from models import Customer

session = Session()

customer = session.query(Customer).filter_by(name='John').first()

session.delete(customer)

session.commit()

session.close()

在上面的示例中,我們使用Session類創(chuàng)建了一個名為session的會話對象,然后使用query方法查詢了customers表格中name為John的數(shù)據(jù),并使用first方法獲取查詢結(jié)果的第一個元素。接著,我們使用delete方法刪除該元素,并使用commit方法提交刪除,并關(guān)閉會話對象。

總之,SQLAlchemy是一個強大的ORM框架,它提供了豐富的功能,可以大大簡化Python和關(guān)系型數(shù)據(jù)庫之間的交互。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-03-22 09:10:28

NginxNginx 簡介服務(wù)器

2010-05-18 10:46:46

2022-02-16 09:42:33

Linuxapt命令軟件包

2020-11-26 11:25:44

VimLinuxPython IDE

2023-03-31 11:14:13

java虛擬機指令

2020-02-04 10:05:54

LinuxWeb命令

2020-02-03 14:45:50

LinuxWeb前端

2017-12-21 15:03:31

PythonSQLiteMySQL

2020-02-05 09:20:37

LinuxWeb前端

2011-03-23 17:19:07

LAMPDiscuz

2020-02-06 16:23:00

LinuxWeb前端

2019-05-17 15:48:16

神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)人工智能

2011-07-05 10:16:16

Qt 數(shù)據(jù)庫 SQLite

2013-07-17 17:15:44

學(xué)習(xí)編程移動開發(fā)移動互聯(lián)網(wǎng)

2010-03-03 17:10:57

Python操作Sql

2010-03-04 15:31:44

Python SQLI

2012-05-11 09:37:34

HTML5

2011-03-25 14:40:33

Nagios監(jiān)控

2011-07-04 17:18:23

Qt SQLite 數(shù)據(jù)庫

2025-04-03 08:30:00

Python數(shù)據(jù)庫ORM
點贊
收藏

51CTO技術(shù)棧公眾號