python-web框架flask:連接mysql

參考: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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章