日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

建立数据库对象

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

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

1. 單連接模式

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

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

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

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

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

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

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

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

2 實時數(shù)據(jù)庫實例化

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

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

3 動態(tài)實例化

peewee甚至允許數(shù)據(jù)庫的動態(tài)實例化,這里用到了代理模式:

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

4 連接池

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

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

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

轉(zhuǎn)載于:https://my.oschina.net/yehun/blog/870950

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。