久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    python不用數據庫,達到快速存儲數據的方法

     Yy3318q 2023-03-24 發布于廣西

    在Python中,數據庫并不是存儲大量結構化數據的最簡單解決方案。dataset提供了一個簡單的抽象層,可以刪除大多數直接的 SQL 語句,而無需完整的 ORM 模型,數據庫可以像 JSON 文件或 NoSQL 存儲一樣使用。

    dataset是用于快速存儲數據的最簡單方法。

    特點

    • 自動架構:如果寫入數據庫中不存在的表或列,它將自動創建。
    • Upserts:創建或更新記錄,具體取決于是否可以找到現有版本。
    • 用于簡單查詢的查詢助手,例如all表中的行或distinct一組列中的所有值。
    • 兼容性:建立在SQLAlchemy之上,dataset適用于所有主要數據庫,例如 SQLite、PostgreSQL 和 MySQL。

    連接數據庫

    要連接到數據庫,您需要通過其URL來識別它,以下是不同數據庫后端的幾個示例:
    # connecting to a SQLite databasedb = dataset.connect('sqlite:///mydatabase.db')
    # connecting to a MySQL database with user and passworddb = dataset.connect('mysql://user:password@localhost/mydatabase')
    # connecting to a PostgreSQL databasedb = dataset.connect('postgresql://scott:tiger@localhost:5432/mydatabase')

    存儲數據

    要存儲一些數據,您需要獲得對表的引用
    # get a reference to the table 'user'table = db['user']

    將數據存儲在只需傳遞一個dict即可插入。不需要創建列名稱和年齡——數據集會自動執行此操作:

    # Insert a new record.table.insert(dict(name='John Doe', age=46, country='China'))
    # dataset will create 'missing' columns any time you insert a dict with an unknown keytable.insert(dict(name='Jane Doe', age=37, country='France', gender='female'))
    更新現有條目也很容易:
    table.update(dict(name='John Doe', age=47), ['name'])
    使用第一列中的值作為第二個參數過濾器給出的過濾器列列表。如果您不想更新特定值,只需使用自動生成的id列。

    使用

    您可以將一組數據庫更新分組到一個事務中。在這種情況下,所有更新都會立即提交,或者在異常情況下,所有更新都會被還原。通過上下文管理器支持事務,因此可以通過with 語句使用它們:
    with dataset.connect() as tx: tx['user'].insert(dict(name='John Doe', age=46, country='China'))
    通過調用方法獲得相同的功能begin(), commit()rollback() 明確:
    db = dataset.connect()db.begin()try:    db['user'].insert(dict(name='John Doe', age=46, country='China'))    db.commit()except:    db.rollback()

    也支持嵌套事務:

    db = dataset.connect()with db as tx1:    tx1['user'].insert(dict(name='John Doe', age=46, country='China'))    with db as tx2:        tx2['user'].insert(dict(name='Jane Doe', age=37, country='France', gender='female'))

    檢查數據庫和表

    在處理未知數據庫時,我們先檢查它們的結構。找出數據庫中存儲了哪些表:
    >>> print(db.tables)[u'user']

    列出表中所有可用的列user

    >>> print(db['user'].columns)[u'id', u'country', u'age', u'name', u'gender']
    使用len()獲得表中的總行數:
    >>> print(len(db['user']))2

    從表中讀取數據

    現在讓我們從表中獲取一些真實數據:

    users = db['user'].all()

    如果我們只是想遍歷表中的所有行,我們可以省略all():

    for user in db['user']:   print(user['age'])

    我們可以使用find()搜索特定條目find_one():

    # All users from Chinachinese_users = table.find(country='China')
    # Get a specific userjohn = table.find_one(name='John Doe')
    # Find multiple at oncewinners = table.find(id=[1, 3, 7])
    # Find by comparison operatorelderly_users = table.find(age={'>=': 70})possible_customers = table.find(age={'between': [21, 80]})
    # Use the underlying SQLAlchemy directlyelderly_users = table.find(table.table.columns.age >= 70)

    使用 distinct()我們可以在一個或多個列中獲取一組具有唯一值的行:

    # Get one user per countrydb['user'].distinct('country')

    最后,您可以使用row_type參數來選擇返回結果的數據類型:

    import datasetfrom stuf import stuf
    db = dataset.connect('sqlite:///mydatabase.db', row_type=stuf)

    現在內容將在對象中返回stuf(基本上,dict 其元素可以作為屬性 ( item.name) 以及索引 ( item['name']) 訪問的對象。

    運行自定義 SQL 查詢

    當然,您使用數據庫的主要原因是您希望使用 SQL 查詢的全部功能。下面是你如何運行它們dataset:

    result = db.query('SELECT country, COUNT(*) c FROM user GROUP BY country')for row in result:   print(row['country'], row['c'])

    該query()方法還可用于訪問底層的SQLAlchemy 核心 API,它允許以編程方式構建更復雜的查詢:

    table = db['user'].tablestatement = table.select(table.c.name.like('%John%'))result = db.query(statement)

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 午夜大片免费男女爽爽影院| 在线理论三级午夜电影| 九九在线精品国产| 在线 国产 欧美 专区| 国产欧美一区二区精品久久久| 日夜啪啪一区二区三区| 亚洲熟妇无码AV在线播放| 国精偷拍一区二区三区| 无码国产精品久久一区免费| 在线播放亚洲成人av| 国产成人乱色伦区| 国产乱码1卡二卡3卡四卡5| 久久久久久亚洲精品成人| 亚洲欧美自偷自拍视频图片| 精品一区二区三区免费播放| 日本熟妇XXXX潮喷视频| 又大又粗又硬又爽黄毛少妇 | 在线a级毛片无码免费真人| 欧美成人VA免费大片视频| 亚洲尤码不卡av麻豆| 精品无码日韩国产不卡AV| 女上男下激烈啪啪无遮挡 | 亚洲精品乱码久久久久久不卡| 亚洲人成电影网站 久久影视| 天码AV无码一区二区三区四区| 国产999久久高清免费观看| 久久精品国产亚洲AV高清热 | 黄又色又污又爽又高潮动态图| 青青草无码免费一二三区| 公喝错春药让我高潮| 52熟女露脸国语对白视频| 国产成人午夜福利院| 亚洲va久久久噜噜噜久久狠狠| 精品国精品自拍自在线| 天天澡日日澡狠狠欧美老妇| 成人网站WWW污污污网站| 亚洲国产成人久久精品APP| 日本高清一区免费中文视频| 男女爽爽无遮挡午夜视频| 日韩亚洲AV人人夜夜澡人人爽| 高清无码一区二区在线观看|