Việc sử dụng mô-đun pymysql trong python là gì?

GHI CHÚ. PyMySQL không hỗ trợ API cấp thấp mà _mysql cung cấp như data_seek, store_result và use_result. Bạn nên sử dụng API cấp cao được xác định trong PEP 249. Nhưng một số API như autocommit và ping được hỗ trợ vì PEP 249 không bao gồm trường hợp sử dụng của chúng

  • Python - một trong những điều sau đây

  • Máy chủ MySQL - một trong những điều sau đây

Gói được tải lên trên PyPI

Bạn có thể cài đặt nó với pip

$ python3 -m pip install PyMySQL

Để sử dụng “sha256_password” hoặc “caching_sha2_password” để xác thực, bạn cần cài đặt phụ thuộc bổ sung

Phần thảo luận về mô-đun Python PyMySQL này giả định một số kiến ​​thức cơ bản về Python mà bạn có thể chưa có trong CS 111. Vì vậy, tôi thực sự khuyên bạn nên đọc mô tả Python 102 của tôi về một số khái niệm và kỹ thuật Python trung gian

Nếu bạn cảm thấy khá run về kiến ​​thức Python của mình [có thể bạn đã học CS 111 từ lâu hoặc bạn đã bỏ qua CS 111 vì tham gia một khóa học trung học về Python], tôi thực sự khuyên bạn nên bắt đầu với sự cố Python 101 của tôi

Chúng tôi sẽ có một sự lạc đề ngắn gọn về các mô-đun và API, sau đó đi vào PyMySQL

  • Mã số
  • Thời gian máy chủ
  • API
  • Môi trường ảo
  • PyMySQL
  • Tổng quan
  • Kết nối với Hệ quản trị cơ sở dữ liệu [DBMS]
  • đối tượng kết nối
  • Sử dụng cơ sở dữ liệu
  • con trỏ
  • Sử dụng tập lệnh này
  • Truy vấn đã chuẩn bị
  • %s làm trình giữ chỗ
  • Bàn Bobby
  • Hoàn thành ví dụ về các truy vấn đã chuẩn bị
  • Cam kết và cập nhật
  • Không và NULL
  • Bản tóm tắt
  • Tuples vs Từ điển

Mã số¶

Tất cả các ví dụ mã đến từ các tệp trong thư mục

ls -A ~/.my.cnf
6

Thời gian máy chủ¶

Đây là một kịch bản rất đơn giản, nhưng bản thân nó rất hữu ích và nó minh họa một số ý tưởng quan trọng. Đoạn mã sau nằm trong một tệp có tên

ls -A ~/.my.cnf
7

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]

Đây là cách chúng ta có thể sử dụng nó từ Unix shell

$  python servertime.py
2020-03-01 15:13:37 

Rất tuyệt, đặc biệt nếu bạn không quen với lệnh Unix

ls -A ~/.my.cnf
8

Nếu chúng tôi nhập tệp đó, nó sẽ cung cấp chức năng

ls -A ~/.my.cnf
9, nhưng không in bất kỳ thứ gì. Tức là phần sau câu lệnh
import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
0 không chạy

API¶

API là Giao diện lập trình ứng dụng, có nghĩa là cách một phần của chương trình gồm nhiều phần giao tiếp với phần khác

Mô-đun

import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
1 là một ví dụ nhỏ lố bịch về điều đó. Khi chúng tôi
import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
2 mô-đun thời gian máy chủ vào một tệp Python khác, thì chúng tôi có thể sử dụng một hàm có tên là
import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
3

Nói chung, một mô-đun Python có thể tạo một tập hợp lớn các hàm, đối tượng, lớp và phương thức mà mã nhập có thể sử dụng để hoàn thành công việc hữu ích

Môi trường ảo¶

Tập lệnh

ls -A ~/.my.cnf
7 nhập mô-đun
import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
5, là một phần của bộ gói Python tiêu chuẩn, vì vậy bạn có thể cho rằng nó đã được cài đặt trên hệ thống của mình. Tuy nhiên, nếu bạn cần cài đặt các gói khác, bạn phải là quản trị viên hoặc sử dụng môi trường ảo. Đây là nhiều hơn về môi trường ảo

Chúng tôi sẽ sử dụng môi trường ảo trong CS 304 và cài đặt

import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
6 và
import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']
7 [cũng như một số gói khác mà chúng tôi sẽ đề cập sau]

Kết nối cơ sở dữ liệu Python

Bây giờ chúng ta đã biết một chút về Python và chúng ta có thể nhập mô-đun PyMySQL, chúng ta sẽ chuyển sang mô-đun đó, mô-đun này cho phép chúng ta nói chuyện với cơ sở dữ liệu phía sau

PyMySQL¶

PyMySQL là một mô-đun Python cung cấp các chức năng, đối tượng và phương thức [API] để tương tác với MySQL DBMS. Bạn chắc chắn nên dành một chút thời gian với một trong những điều sau đây

  • Hướng dẫn PyMySQL tại TutorialsPoint. Điều này có thể đọc được và gần như hoàn thành. Lưu ý rằng đôi khi nó đề cập đến PyMySQL và đôi khi là MySQLdb, đây là phiên bản của mô-đun hoạt động với Python 2. Coi hai thuật ngữ là hoán đổi cho nhau
  • Tài liệu chính thức của PyMySQL Tài liệu này toàn diện, nhưng là tài liệu tham khảo, không phải hướng dẫn. Tuy nhiên, có một Hướng dẫn sử dụng với một số ví dụ hay

Tổng quan¶

Để hiểu cách chúng ta sẽ làm việc với cơ sở dữ liệu từ Python, chúng ta cần tìm hiểu những điều sau đây

  • Cách kết nối với DBMS, bằng tên người dùng/mật khẩu hoặc bằng tệp thông tin xác thực
  • Cách sử dụng một cơ sở dữ liệu cụ thể, cơ sở dữ liệu cá nhân của chúng tôi hoặc WMDB và cuối cùng là cơ sở dữ liệu dự án. Điều này giống như câu lệnh
    import pymysql
    
    conn = pymysql.connect[user='cs304guest',
                           password='secret',  # not really
                           host='localhost',
                           database='wmdb']
    8 mà chúng tôi đã sử dụng trong các tệp hàng loạt
    import pymysql
    
    conn = pymysql.connect[user='cs304guest',
                           password='secret',  # not really
                           host='localhost',
                           database='wmdb']
    9 của mình
  • Cách thực hiện truy vấn
  • Cách thực hiện truy vấn đã chuẩn bị, là truy vấn được tham số hóa, cho phép tham số từ các nguồn không đáng tin cậy
  • Cách thực hiện các bản cập nhật, bao gồm cả cam kết

Chúng tôi cũng có thể tìm hiểu một số chủ đề hữu ích nhưng không cần thiết cho CS 304, chẳng hạn như đối số dòng lệnh và các chủ đề khác

Kết nối với Hệ thống quản lý cơ sở dữ liệu [DBMS]¶

Khi bất kỳ ai kết nối với MySQL, họ phải có tên người dùng và mật khẩu. Điều đó đã vô hình đối với bạn trong CS 304 vì [1] Tôi đã tạo tài khoản MySQL cho bạn và [2] ứng dụng khách MySQL [lệnh

ls -A ~/.my.cnf
70] không yêu cầu bạn nhập tên người dùng và mật khẩu. Thay vào đó, nó đọc chúng từ tệp thông tin xác thực có tên là
ls -A ~/.my.cnf
71. Nhớ lại rằng
ls -A ~/.my.cnf
72 có nghĩa là tệp nằm trong thư mục chính của bạn và dấu chấm ở đầu tên tệp có nghĩa là tệp không hiển thị trong lệnh
ls -A ~/.my.cnf
73 thông thường. Thay vào đó, bạn phải nói

ls -A ~/.my.cnf

Mỗi người trong số các bạn có phiên bản duy nhất của tệp đó, với tên người dùng và mật khẩu [được tạo ngẫu nhiên] của riêng bạn trong đó

Khi chúng tôi kết nối với DBMS từ tập lệnh Python, chúng tôi cũng phải cung cấp tên người dùng và mật khẩu. Chúng ta sẽ tìm hiểu cách thực hiện điều đó bằng cách sử dụng gói PyMySQL và một cách khác bằng cách sử dụng gói tự phát triển có tên là

ls -A ~/.my.cnf
74

Hàm PyMySQL để kết nối với DBMS được gọi là

ls -A ~/.my.cnf
75 và nó có thể lấy tên người dùng/mật khẩu hoặc tên của tệp thông tin xác thực. Hàm trả về một đối tượng có tên là
ls -A ~/.my.cnf
76 có các phương thức mà chúng ta sẽ sử dụng. Hiện tại, chúng ta sẽ chỉ lấy đối tượng kết nối và thường đặt nó vào một biến có tên là
ls -A ~/.my.cnf
77

Kết nối với DBSM bằng Mô-đun PyMySQL

May mắn thay, việc nhập mô-đun không yêu cầu bất kỳ cách viết hoa sai lệch nào

import pymysql

conn = pymysql.connect[user='cs304guest',
                       password='secret',  # not really
                       host='localhost',
                       database='wmdb']

Có một vài lý do để không thích đoạn mã trên

  1. Nếu mã sẽ được công khai [mã này sẽ có trong CS 304, vì chúng tôi sẽ sử dụng GitHub], thì tên người dùng và mật khẩu của chúng tôi sẽ có rủi ro bảo mật được đăng công khai
  2. Chúng tôi phải sao chép/dán tên người dùng và mật khẩu vào mọi nơi chúng tôi kết nối và chúng tôi sẽ kết nối từ từng tuyến đường trong ứng dụng Flask của chúng tôi
  3. Thật tẻ nhạt khi sửa đổi tên người dùng/mật khẩu vì nó được sao chép ở nhiều nơi

Một cải tiến là sử dụng tệp thông tin xác thực

ls -A ~/.my.cnf
7

Điều này tốt hơn nhiều. Nhược điểm duy nhất của điều này là vì ứng dụng Flask của chúng ta sẽ chạy trong một khoảng thời gian dài và sẽ kết nối nhiều lần trong quá trình chạy, ứng dụng sẽ đọc lại tệp

ls -A ~/.my.cnf
78 nhiều lần, mặc dù tệp sẽ không thay đổi. Vì vậy, một cải tiến là yếu tố đọc tệp thông tin xác thực [và lưu vào bộ đệm các giá trị] khi kết nối với cơ sở dữ liệu. Hơn nữa, chúng tôi có thể chọn cơ sở dữ liệu và lưu trữ trong thông tin xác thực được lưu trong bộ nhớ cache và có chức năng
ls -A ~/.my.cnf
75 [theo mặc định] sử dụng thông tin được lưu trong bộ nhớ cache. Đây là cách nó sẽ hoạt động

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
0

Điều đó giống như một bước lùi, vì đó là hai dòng thay vì một, nhưng chức năng đọc tệp CNF và lưu trữ kết quả cũng như sử dụng cơ sở dữ liệu [hàm

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
00] chỉ cần thực hiện một lần, vì vậy chúng tôi có thể thực hiện điều đó khi ứng dụng . Sau đó, chúng ta có thể kết nối chỉ với một dòng đơn giản

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
2

Đối tượng kết nối¶

Tất cả các ví dụ trên đã tạo một đối tượng kết nối mà tôi luôn lưu trữ trong một biến có tên là

ls -A ~/.my.cnf
77. [Tất nhiên, bạn có thể lưu trữ nó trong bất kỳ tên biến nào bạn muốn, nhưng tôi sẽ sử dụng
ls -A ~/.my.cnf
77. ]

Đây là thứ gì? . Sau khi bà nhấc máy, điện thoại của bạn được kết nối với bà. Bạn có thể đặt câu hỏi cho cô ấy và cô ấy có thể trả lời. Bạn có thể đưa điện thoại cho mẹ, bố, anh chị em của mình và họ cũng có thể nói chuyện với bà. Điện thoại cầm tay là một đối tượng cho phép bất cứ ai nói chuyện với bà và bạn có thể chuyển nó xung quanh. Nó thể hiện sự kết nối. [Đôi khi, có rất nhiều tĩnh. Bạn có một kết nối xấu. Bạn có thể gác máy và gọi lại, để có một kết nối mới. ]

Đối tượng kết nối đại diện cho kết nối của chúng tôi với máy chủ MySQL. Những người khác cũng có thể kết nối với máy chủ [giống như anh em họ của bạn cũng có thể kết nối với bà]. Họ nhận được các đối tượng kết nối của riêng họ

Chúng tôi sử dụng đối tượng kết nối chỉ cho một vài thao tác

  • chọn cơ sở dữ liệu nào chúng tôi đang sử dụng và
  • tạo con trỏ

Sử dụng cơ sở dữ liệu¶

Khi chúng tôi kết nối, chúng tôi có thể muốn chuyển đổi cơ sở dữ liệu, vì mã của chúng tôi đang làm việc với nhiều cơ sở dữ liệu hoặc vì cơ sở dữ liệu được đặt trong tệp

ls -A ~/.my.cnf
71 của chúng tôi không phải là cơ sở chúng tôi muốn. [Tất nhiên, nếu chúng tôi luôn muốn cơ sở dữ liệu khác, chúng tôi chỉ cần chỉnh sửa tệp thông tin xác thực. Nó chỉ là một tệp ASCII và chúng tôi có thể chỉnh sửa nó bằng Mã VS. ]

Trong PyMySQL thô, bạn có thể sử dụng một phương thức trên đối tượng kết nối

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
6

Nếu bạn đang sử dụng

ls -A ~/.my.cnf
74 với thông tin xác thực đã lưu trong bộ nhớ cache và bạn muốn kết nối tiếp theo sử dụng cơ sở dữ liệu khác, chỉ cần sửa đổi thông tin xác thực đã lưu trong bộ nhớ cache trước khi kết nối. Chúng tôi đã thấy điều đó ở trên

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
8

Điều này rất thuận tiện và vì các bước đầu tiên [đọc và lưu vào bộ đệm CNF và sửa đổi nó để sử dụng cơ sở dữ liệu khác] khác biệt về mặt khái niệm với việc tạo kết nối, nên chúng tôi sẽ thường mô đun hóa các bước này trong các ứng dụng Flask của mình. Chúng tôi sẽ đề cập đến điều đó khi chúng tôi nhận được nó

Con trỏ¶

Khi chúng tôi có một đối tượng kết nối, chúng tôi cần có khả năng thực hiện các truy vấn và đọc kết quả. Cả hai đều được thực hiện với các đối tượng đặc biệt được gọi là con trỏ. [Thật vậy, mọi API cơ sở dữ liệu mà tôi quen thuộc đều có con trỏ, vì vậy đây là một khái niệm rất chung chung, vì các vấn đề chúng ta sẽ thảo luận ngay bây giờ. ] Chúng tôi nhận được một con trỏ bằng cách yêu cầu một con trỏ từ một đối tượng kết nối. Con trỏ rẻ, vì vậy hãy thoải mái lấy một con cho mọi truy vấn

Thực hiện một truy vấn đơn giản khá dễ dàng. Có một phương thức

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
05 trên một con trỏ sẽ gửi chuỗi truy vấn đã cho tới DBMS và đọc kết quả

Về mặt khái niệm, đọc kết quả có vẻ dễ dàng nhưng nó có hai kiểu. Một cách là lấy tất cả các kết quả dưới dạng danh sách/mảng [có thể lớn]. Để làm điều đó, có một phương pháp

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
06 trên con trỏ. Nhưng vì kết quả có thể lớn và chúng tôi có thể không muốn tất cả chúng hoặc vì chúng tôi muốn làm điều gì đó với từng mục trước khi chuyển sang mục tiếp theo hoặc các lý do tương tự, chúng tôi có thể nhận kết quả từng hàng một. Có một phương pháp
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
07 trên con trỏ để làm điều đó. Nếu không còn hàng nào nữa, phương thức
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
07 trả về
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
09. [API này có thể nhắc bạn về các trình vòng lặp của Java và đó là trực giác chính xác. ]

Cuối cùng, chúng ta cần thảo luận về cách mỗi hàng được biểu diễn trong Python. Con trỏ có thể biểu diễn một hàng dưới dạng bộ dữ liệu hoặc từ điển. Bạn chỉ định điều này khi bạn yêu cầu một con trỏ từ kết nối

Đây là một ví dụ [

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
20] hiển thị một ví dụ về con trỏ tuple và phương thức
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
07

$  python servertime.py
2020-03-01 15:13:37 
6

Trong trường hợp đó, chúng tôi biết rằng [vì truy vấn đang sử dụng khóa

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
22] nên chỉ có thể có 0 hoặc 1 kết quả, vì vậy
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
07 là lựa chọn hợp lý

Tệp

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
24 hiển thị một giải pháp thay thế nhận được nhiều kết quả, được biểu thị dưới dạng từ điển

$  python servertime.py
2020-03-01 15:13:37 
0

Kịch bản đó hoạt động, nhưng nó không phải là phong cách mã hóa tuyệt vời.

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
25 là tệp Python cũng có thể được sử dụng làm mô-đun trong hệ thống lớn hơn, cung cấp hàm trả về danh sách tất cả những người trong cơ sở dữ liệu

$  python servertime.py
2020-03-01 15:13:37 
1

Sử dụng Tập lệnh này¶

Bạn có thể sử dụng tập lệnh này từ dòng lệnh Unix rất dễ dàng. Chỉ cần kích hoạt môi trường ảo của bạn và chạy python bằng tập lệnh, như thế này

$  python servertime.py
2020-03-01 15:13:37 
2

Truy vấn đã chuẩn bị¶

Kịch bản trên không sao, nhưng nó luôn trả về mọi người. Điều gì sẽ xảy ra nếu chúng ta chỉ muốn những người sinh vào tháng 9? . Đối với điều đó, chúng ta cần một cách để tham số hóa một truy vấn

Hóa ra những cách đơn giản để kết hợp đầu vào của người dùng với mã SQL khác và thực hiện truy vấn kết quả có thể dẫn đến các lỗ hổng bảo mật. Cụ thể, mười lỗ hổng hàng đầu lâu năm được gọi là SQL injection, đó là khi kẻ tấn công có thể lừa mã của bạn để thực thi một số mã SQL đến từ kẻ tấn công

Một cách quan trọng để ngăn chặn một cuộc tấn công SQL injection là sử dụng các truy vấn đã chuẩn bị sẵn, đây là một cách an toàn để tham số hóa một truy vấn với dữ liệu không đáng tin cậy

Giả sử bạn có một truy vấn như thế này

$  python servertime.py
2020-03-01 15:13:37 
3

hơn nữa, bạn có một giá trị đến từ người dùng, một nguồn không đáng tin cậy. Giả sử nó nằm trong một biến có tên là

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
26

Cách sai để kết hợp cả hai là kết hợp chúng dưới dạng chuỗi và sau đó thực hiện kết quả

$  python servertime.py
2020-03-01 15:13:37 
4

Cách đúng để thực hiện truy vấn được tham số hóa là tách mã SQL đáng tin cậy khỏi các tham số không đáng tin cậy

PyMySQL thực hiện các truy vấn đã chuẩn bị như sau. 1 Phương thức

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
05 có thể lấy đối số thứ hai tùy chọn là danh sách các giá trị tham số. Mỗi giá trị tham số được khớp với một trình giữ chỗ trong chuỗi SQL là đối số đầu tiên. Trong PyMySQL, trình giữ chỗ là
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
28

$  python servertime.py
2020-03-01 15:13:37 
5

Nếu bạn cần có nhiều tham số, chỉ cần sử dụng nhiều trình giữ chỗ. Các trình giữ chỗ được khớp với các tham số từ trái sang phải, giống như các lệnh gọi hàm

$  python servertime.py
2020-03-01 15:13:37 
6

%s làm trình giữ chỗ¶

Các API khác nhau sử dụng các ký tự giữ chỗ khác nhau. Một số sử dụng một dấu chấm hỏi. Một số cho phép đặt tên tham số. Trong một số, như PyMySQL, trình giữ chỗ là

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
28. Đây là một lựa chọn đáng tiếc, vì
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
28 cũng được sử dụng cho một loại định dạng chuỗi, điều mà chúng tôi không thực hiện. Tôi chắc chắn rằng %s được chọn vì các lập trình viên đã quen với %s như một loại trình giữ chỗ trong định dạng chuỗi, nhưng chúng tôi muốn tránh định dạng chuỗi

Bàn Bobby¶

Đây là một phim hoạt hình XKCD nổi tiếng minh họa quan điểm

Điểm mấu chốt nói về việc làm sạch các đầu vào cơ sở dữ liệu của bạn nhưng tốt hơn nữa là sử dụng các truy vấn đã chuẩn bị sẵn, bởi vì chúng tuyệt đối giữ cho đầu vào của người dùng bất chính không bị coi là mã SQL, đây là mấu chốt của một cuộc tấn công SQL injection

Ví dụ đầy đủ về truy vấn đã chuẩn bị¶

Đây là ví dụ hoàn chỉnh cho

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
61

$  python servertime.py
2020-03-01 15:13:37 
7

Ví dụ trên cho phép người dùng chạy tập lệnh với đối số dòng lệnh là tháng tìm kiếm. Nếu bạn không biết về đối số dòng lệnh trong Python, bạn có thể đọc thêm về nó bên dưới, nhưng nó không cần thiết cho chủ đề này

Cũng lưu ý rằng việc sử dụng chuỗi trích dẫn ba lần và khả năng trải chuỗi trên nhiều dòng giúp việc nhúng ngôn ngữ khác [mã SQL] vào Python dễ dàng hơn nhiều, theo cách có thể đọc được. Tôi thực sự khuyên bạn nên sử dụng mã đó bất cứ lúc nào mã SQL nhúng của bạn là bất cứ thứ gì ngoại trừ tầm thường

Chúng tôi có thể sử dụng những ý tưởng tương tự này để tạo một tập lệnh cho phép chúng tôi dễ dàng chèn dữ liệu vào cơ sở dữ liệu

Cam kết và cập nhật¶

Có một sự khác biệt quan trọng giữa hành vi mặc định của ứng dụng khách PyMySQL và ứng dụng khách

ls -A ~/.my.cnf
70. Ứng dụng khách
ls -A ~/.my.cnf
70 tự động thực hiện bất kỳ thay đổi nào [biến chúng thành vĩnh viễn]. Hành vi mặc định của
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
64 yêu cầu bạn thực hiện các thay đổi bằng cách sử dụng
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
65 trên đối tượng kết nối

Trong PyMySQL thô

$  python servertime.py
2020-03-01 15:13:37 
8

Tập lệnh

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
66 là một ví dụ. Lưu ý rằng kết nối được thực hiện chỉ với một dòng, vì chúng tôi muốn sử dụng tệp thông tin xác thực mặc định chứ không phải một cơ sở dữ liệu khác. Vì vậy tất cả những gì chúng ta cần là

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
2

Đây là chức năng có liên quan trong tệp

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
66

ls -A ~/.my.cnf
0

Lưu ý rằng vì phương thức

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
69 nằm trên đối tượng kết nối, không phải con trỏ, nên việc chuyển các đối tượng kết nối làm đối số cho các hàm cần cập nhật với cơ sở dữ liệu sẽ thuận tiện hơn, bởi vì sau đó chúng có thể thực hiện các thay đổi của mình. Thật dễ dàng để họ tạo một con trỏ

Không và NULL¶

Chúng tôi biết rằng SQL có một giá trị đặc biệt

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
80 được sử dụng để biểu thị các giá trị không xác định hoặc bị thiếu. Lưu ý rằng
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
80 khác với chuỗi
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
82. Chúng tôi có thể lưu trữ một
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
80 trong một cột số [chẳng hạn như,
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
84] để nói rằng nó không xác định, nhưng chúng tôi không thể lưu trữ chuỗi
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
82 trong một cột số. [Nó sẽ được chuyển đổi thành không. ]

Chúng tôi biết rằng Python có một giá trị đặc biệt

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
09 khác [có kiểu dữ liệu khác] với bất kỳ giá trị nào khác. Xem Không Tóm lại, nó đóng một vai trò tương tự trong ngôn ngữ Python mà
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
80 đóng trong SQL

API PyMySQL dịch giữa

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
09 và
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
80. Vì vậy, nếu bạn tra cứu đạo diễn của một bộ phim mà cơ sở dữ liệu không có, bạn sẽ nhận được
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
09

ls -A ~/.my.cnf
1

Tương tự, để đặt giá trị thành

# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
80, bạn sẽ sử dụng
# Script to show the time on the server

# Written by Scott D. Anderson
# scott.anderson@acm.org

import sys

from datetime import datetime

def now[]:
    """Returns a string for the current day and time.

    The output is in something close to Internet format. It's not really
    Internet format because it neither converts to UTC nor
    appends the time zone.  However, it will work nicely for MySQL.
    """
    now = datetime.now[]
    return now.strftime["%Y-%m-%d %H:%M:%S"]

if __name__ == '__main__':
    print[now[]]
09

ls -A ~/.my.cnf
2

Bản tóm tắt¶

Dưới đây là các bước cần thiết để sử dụng cơ sở dữ liệu từ Python

  1. nhập pymsql hoặc cs304dbi
  2. kết nối với cơ sở dữ liệu bằng thông tin xác thực phù hợp
  3. tạo một con trỏ thuộc loại [bộ hoặc từ điển] bạn muốn
  4. thực thi câu lệnh SQL bạn muốn, sử dụng con trỏ. Nếu nó cần tham số từ một nguồn không đáng tin cậy, hãy sử dụng truy vấn đã chuẩn bị sẵn. *
    $  python servertime.py
    2020-03-01 15:13:37 
    63 đối với các truy vấn không có tham số hoặc *
    $  python servertime.py
    2020-03-01 15:13:37 
    64 đối với các truy vấn có N giá trị động
  5. tìm nạp kết quả bằng
    # Script to show the time on the server
    
    # Written by Scott D. Anderson
    # scott.anderson@acm.org
    
    import sys
    
    from datetime import datetime
    
    def now[]:
        """Returns a string for the current day and time.
    
        The output is in something close to Internet format. It's not really
        Internet format because it neither converts to UTC nor
        appends the time zone.  However, it will work nicely for MySQL.
        """
        now = datetime.now[]
        return now.strftime["%Y-%m-%d %H:%M:%S"]
    
    if __name__ == '__main__':
        print[now[]]
    07 hoặc
    # Script to show the time on the server
    
    # Written by Scott D. Anderson
    # scott.anderson@acm.org
    
    import sys
    
    from datetime import datetime
    
    def now[]:
        """Returns a string for the current day and time.
    
        The output is in something close to Internet format. It's not really
        Internet format because it neither converts to UTC nor
        appends the time zone.  However, it will work nicely for MySQL.
        """
        now = datetime.now[]
        return now.strftime["%Y-%m-%d %H:%M:%S"]
    
    if __name__ == '__main__':
        print[now[]]
    06 trên con trỏ

Tuples vs Dictionaries¶

Bạn nên sử dụng con trỏ tuple hay con trỏ từ điển?

Số cột

Nếu tôi nhận được nhiều hơn một hoặc hai cột dữ liệu, thì việc sử dụng kết quả dưới dạng bộ dữ liệu có nghĩa là tôi phải thực hiện một số thao tác đếm tẻ nhạt và dễ bị lỗi để có được chỉ mục chính xác

ls -A ~/.my.cnf
3

Nhưng sử dụng từ điển, mã thực tế là tự ghi lại

ls -A ~/.my.cnf
4

Nhân tiện, tôi luôn sử dụng

$  python servertime.py
2020-03-01 15:13:37 
67 cho các cột trong trình bao MySQL [máy khách] nhưng không bao giờ trong mã sản xuất. Tôi muốn chỉ định chính xác dữ liệu nào tôi sẽ trả lại. Ngoài ra, vì thứ tự của các cột chỉ định việc đánh số các phần tử của một bộ, nên
$  python servertime.py
2020-03-01 15:13:37 
67 đặc biệt khó sử dụng

Ngoài ra, bạn có thể sử dụng phép gán hủy để tách bộ dữ liệu

ls -A ~/.my.cnf
5

Điều đó cũng hoạt động tốt, nhưng nếu chúng ta phải chuyển dữ liệu sang một chức năng khác, chúng ta phải chuyển 6 giá trị thay vì một từ điển duy nhất, vì vậy để cân bằng, tôi thích từ điển hơn

Số lượng dữ liệu

Từ điển không hoàn toàn nhỏ gọn như bộ dữ liệu và đôi khi dữ liệu bổ sung đó có vấn đề. Khi tôi xử lý tất cả 300 nghìn hàng dữ liệu trong cơ sở dữ liệu về bệnh tiểu đường, Python sẽ hết bộ nhớ nếu tôi sử dụng con trỏ từ điển, nhưng nó hoạt động tốt nếu tôi sử dụng bộ dữ liệu

  1. Đây là một sợi nhỏ. PyMySQL không thực hiện các truy vấn được chuẩn bị sẵn, nhưng thực hiện tốt công việc mô phỏng chúng. Chúng tôi sẽ đối xử với nó như thể nó làm. Các mô-đun API Python_MySQL khác thực hiện các truy vấn được chuẩn bị phù hợp, nhưng chúng khó cài đặt hơn, vì vậy chúng tôi sẽ sử dụng PyMySQL. ↩

    Python kết nối với PyMySQL như thế nào?

    Thông qua thiết bị đầu cuối — bằng cách chạy lệnh sau trong thiết bị đầu cuối của IDE PyCharm của bạn. .
    pip cài đặt pymysql
    nhập khẩu pymysql. # kết nối cơ sở dữ liệu. .
    kết nối = pymysql. kết nối [máy chủ = "127. 0. 0. 1", port=3306, user="root", passwd="", cơ sở dữ liệu="SELECTION_DB"]
    nhập mysql. kết nối

    Sự khác biệt giữa MySQL và PyMySQL là gì?

    PyMySQL và MySQLdb cung cấp chức năng giống nhau - cả hai đều là trình kết nối cơ sở dữ liệu. Sự khác biệt là ở cách triển khai trong đó MySQLdb là phần mở rộng của C và PyMySQL là Python thuần túy . Có một vài lý do để dùng thử PyMySQL. nó có thể dễ dàng hơn để chạy trên một số hệ thống.

    Nhập PyMySQL là gì?

    PyMySQL là thư viện máy khách MySQL thuần Python, dựa trên PEP 249 . Hầu hết các API công khai đều tương thích với mysqlclient và MySQLdb. PyMySQL hoạt động với MySQL 5. 5+ và MariaDB 5. 5+. MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở hàng đầu. Nó là một hệ thống quản lý cơ sở dữ liệu đa người dùng, đa luồng.

Chủ Đề