日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

建立数据库对象

發布時間:2025/7/14 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 建立数据库对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

1. 單連接模式

peewee通過Database類及其子類來建立數據庫對象,目前peewee支持的數據庫有Postgres, MySQL,MySQL,SQLite 以及BerkeleyDB。這里我們僅通過MySQL來進行了解,如果對其他數據庫類型的相關內容感興趣可以參見官方文檔。
mysql通過MySQLDatabase類來初始化數據庫對象,這是Database的一個子類,繼承了父類的構造函數:

class Database(database[, threadlocals=True[, autocommit=True[, fields=None[, ops=None[, autorollback=False[, use_speedups=True[, **connect_kwargs]]]]]]] )

這里
database指數據庫的名稱, 字符串格式
threadlocals指 是否用本地線程保存連接
autocommit 自動提交
fields 添加orm中的數據類型到數據庫中數據類型的映射
ops 定義操作符映射
autorollback 執行數據庫請求時出錯則自動回滾
use_speedups 用Cpython speedup模塊來加速某些queries
connect_kwargs 數據庫驅動中初始化所用的key
另外, MySQLDatabase類還添加了以下選項:

commit_select = True compound_operations = ['UNION'] for_update = True subquery_delete_same_table = False

peewee中的mysql驅動有兩個pymysql和MySQLdb,但是從源碼中可以看到peewee是更傾向于使用MySQLdb的,只有當import MySQLdb as mysql報錯后才會開始引用import pymysql as mysql。

這里舉例介紹一些常用的connect_kwargs,如果需要詳細了解,可以參見源程序中的connections.connection類,里面的注釋已經寫得非常清晰了。例如:

#! /usr/bin/python # coding: utf-8from peewee import *db = MySQLDatabase(database = 'test',# stringpasswd = 'test', # stringuser = 'test', # stringhost = 'localhost', # stringport = 3306, # int )

官方文檔中建議使用數據庫前先調用其db.connect()函數,這個函數功能上并不是必須的,但是可以幫助定位錯誤。
實例化本地數據庫還有另外一種方法: mysql://user:passwd@ip:port/my_db這在Connecting using a Database URL中也有介紹

2 實時數據庫實例化

Database類中的database字段可以先設置為None, 數據庫的實例化可以在隨后得到數據可靠名字之后,具體操作如下:

db = MySQLDatabase(None)# 此時若是調用db.connect()則會報錯# 數據庫的名字 db_name = 'mydb' db.init(database = 'mydb',host = 'test',user = 'test',passwd = 'test' )

3 動態實例化

peewee甚至允許數據庫的動態實例化,這里用到了代理模式:

# 創建數據庫的代理 db_proxy = Proxy() # 使用代理數據庫創建表 class BaseModel(Model):class Meta:database = db_proxy class User(BaseModel):username = CharField()# 根據配置條件來選擇不同的數據庫 if app.config['DEBUG']:db= SqliteDatabase('local.db') elif app.config['TESTING']:db= SqliteDatabase(':memory:') else:db= PostgresqlDatabase('mega_production_db')# 通過代理來根據配置條件將選取的數據庫初始化 database_proxy.initialize(db)

4 連接池

peewee為通過一個'PooledDatabase'基類Mysql, sqlite 和Postgres 提供了連接池的功能。這個基類的定義如下:

class PooledDatabase(database[, max_connections=20[, stale_timeout=None[, **kwargs]]])

其中:
max_connections 定義了最大連接數
stale_timeout 定義了每個連接最大可用時間
具體它的MySQL子類為:class PooledMySQLDatabase

轉載于:https://my.oschina.net/yehun/blog/870950

總結

以上是生活随笔為你收集整理的建立数据库对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。