參考:Python連接MySQL數據庫之pymysql模塊使用
1、通過pymysql連接
1、pip安裝pymysql
在windows上面安裝pymysql需要找到對應的python安裝目錄,然後通過pip命令進行安裝,操作如下(參考:https://www.cnblogs.com/chaojiyingxiong/p/9456063.html):
2、建立連接
import pymysql
def db_conn():
conn = pymysql.connect(host=“你的數據庫地址”, user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的光標對象
cursor = conn.cursor()
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8;
"""
# 執行SQL語句
cursor.execute(sql)
# 關閉光標對象
cursor.close()
# 關閉數據庫連接
conn.close()
建立連接之後,執行操作就是按照對應sql來執行,不跟你bb,在下告辭。
2、通過SQLAlchemy連接
1、配置文件
創建配置文件config.py,內容如下:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:12345678@localhost:3306/mydb'
# 'mysql+pymysql://用戶名稱:密碼@localhost:端口/數據庫名稱'
SQLALCHEMY_TRACK_MODIFICATIONS = True
2、創建連接
創建攜帶config信息的全局應用對象,並以此創建SQLAlchemy對象,如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app, use_native_unicode='utf8')
3、對象綁定表
看一下user對象如何通過SQLAlchemy進行表的綁定。
# -*- coding: utf-8 -*-
from datetime import datetime, date
from . import app
from . import db
from passlib.apps import custom_app_context as pwd_context
from itsdangerous import (TimedJSONWebSignatureSerializer
as Serializer, BadSignature, SignatureExpired)
class User(db.Model):
"""用戶"""
__tablename__ = 'users'
__table_args__ = {'mysql_engine': 'InnoDB'} # 支持事務操作和外鍵
id = db.Column(db.String(32), doc='手機號碼', primary_key=True)
nickname = db.Column(db.String(20), doc='暱稱', default='Wanted User', nullable=False, unique=True)
password_hash = db.Column(db.String(128), doc='密碼', nullable=False)
payPassword = db.Column(db.String(32), doc='支付密碼', nullable=False)
money = db.Column(db.Float, doc='賬戶餘額', default=50, nullable=False)
description = db.Column(db.String(50), doc='個性簽名', default='這個人很懶,什麼也沒留下', nullable=False)
4、數據庫操作
因爲對象已經綁定了數據庫表,並且入參爲 db.Model,所以可以直接使用對應方法,參考:flask連接mysql數據庫操作:
from app import db
# 定義數據模型, 設置表格中各個字段的數據類型
class Grade(db.Model):
g_id = db.Column(db.Integer,primary_key=True,autoincrement=True)
g_name = db.Column(db.String(30),nullable=False, unique=True)
g_num = db.Column(db.Integer, nullable=True)
__tablename__ = 'grade'
def __init__(self, name, num):
self.g_name = name
self.g_num = num
# 生成表格
db.create_all()
# -------------新增操作---------------------
grade1 = Grade('py5',38)
grade2 = Grade('py6',28)
# session:是一塊臨時存儲區域, 用來暫存數據庫操作的數據, 最終通過commit統一提交給數據庫.
db.session.add(grade1)
db.session.add(grade2)
db.session.commit()
## ------------查詢操作---------------------
# 數據查詢(查詢所有數據)
result = Grade.query.all()
for item in result:
print(item.g_name, item.g_num, item.g_id)
# 按照主鍵值查詢
result = Grade.query.get(1)
print(result)
# 按條件查詢, filter()設置對應的過濾條件, 完成數據的過濾操作
result = Grade.query.filter(Grade.g_num > 20).all()
print(result)
# 數據庫分頁查詢, paginate(參數1, 參數2, 參數3), 參數1代表查詢的頁碼, 頁碼值從1開始; 參數2代表每一頁查詢的總數據條數; 參數3是布爾類型,用來設定當查詢超出範圍時, 以何種方式返回結果, 默認爲True, 以404錯誤信息返回, 如果爲False此時以空列表形式返回.
result = Grade.query.paginate(2, 5, False)
print(result.items)
# 獲取查詢結果的總數量
count = Grade.query.count()
# 按條件查詢所有滿足的結果的個數
count = Grade.query.filter(Grade.g_num > 30).count()
print(count)
# 從查詢結果中提取指定數量的數據(利用列表'切片'提取需要的對象)
result = Grade.query.filter(Grade.g_num > 30).all()[1:3]
print(result)
# 多條件查詢語句 startswith:以指定字符開頭
result = Grade.query.filter(Grade.g_name.startswith('py'),Grade.g_num > 30).all()
from sqlalchemy import *
"""
sqlalchemy模塊內置的查詢條件
and_(): 並且
or_(): 或者
not_(): 非, 條件只能一個
"""
result = Grade.query.filter(and_(Grade.g_name.startswith('py'),Grade.g_num > 30)).all()
result = Grade.query.filter(not_(Grade.g_num > 30)).all()
print(result)
# ------------------刪除操作----------------------
# 數據庫的刪除 先查詢再刪除
grades = Grade.query.filter(Grade.g_id > 9).all()
for item in grades:
db.session.delete(item)
db.session.commit()
# ---------------------------修改操作----------------
# 數據修改 查詢後修改
grade_1 = Grade.query.filter(Grade.g_num > 30).first()
grade_1.g_num = 25
db.session.commit()