python数据库(一)

1.使用dbm作为持久化字典

#!/usr/bin/python
#coding:utf-8
'''用持久字典来存储名称/值对
数据是在磁盘读取和写入的
dbm的键和值必须是字符串类型'''

#三个实体items(物品信息)、members(成员信息)、loans(租借信息) 
#创建一个LendyDB DBM数据库(三个DBM文件)
import dbm

# ID, Name, Description, OwnerID, Price, Condition, DateRegistered
items = [
        ['1','Lawnmower','Tool','1','$150','Excellent','2012-01-05'],
        ['2','Lawnmower','Tool','2','$370','Fair','2012-04-01'],
        ['3','Bike','Vehicle','3','$200','Good','2013-03-22'],
        ['4','Drill','Tool','4','$100','Good','2013-10-28'],
        ['5','Scarifier','Tool','5','$200','Average','2013-09-14'],
        ['6','Sprinkler','Tool','1','$80','Good','2014-01-06'] 
        ]

# ID, Name, Email
members = [
        ['1', 'Fred', 'fred@lendylib.org'],
        ['2', 'Mike', 'mike@gmail.com'],
        ['3', 'Joe', 'joe@joesmail.com'],
        ['4', 'Rob', 'rjb@somcorp.com'],
        ['5', 'Anne', 'annie@bigbiz.com'],
        ]

# ID, ItemID(对应items ID), BorrowerID(对应members ID), DateBorrowed, DateReturned
loans = [
        ['1','1','3','4/1/2012','4/26/2012'],
        ['2','2','5','9/5/2012','1/5/2013'],
        ['3','3','4','7/3/2013','7/22/2013'],
        ['4','4','1','11/19/2013','11/29/2013'],
        ['5','5','2','12/5/2013','None']
        ]

def createDB(data,dbName):
    try:
        db = dbm.open(dbName,'c')
        for datum in data:
            key = datum[0]
            db[key] = ','.join(datum)      #使用第一个字段(ID)作为主键且所有字段用','分割
        #   print(key)             #打印键
        #   print(db[datum[0]])         #打印值
    finally:
        db.close()
        print(dbName,'created')

def readDB(dbName):
    try:
        db = dbm.open(dbName,'r')
        print('Reading ',dbName)
        return [db[key] for key in db.keys()]#通过键,返回一个数据列表
    finally:
        db.close()

def main1():
    print('Creating data files...')
    createDB(items,'itemdb')
    createDB(members,'memberdb')
    createDB(loans,'loandb')

    print('Reding data files...')
    print(readDB('itemdb'))
    print(readDB('memberdb'))
    print(readDB('loandb'))

def main2():
    items = dbm.open('itemdb')
    members = dbm.open('memberdb')
    loans = dbm.open('loandb','w')
    
    loan2 = loans['2'].decode()   #decode()把dbm字节格式转换成str字符串格式
    print('loan2:',loan2)
    loan2 = loan2.split(',')      #split()将str字符串分离成单独的域,返回一个列表 
    print('loan2:',loan2)

    #通过使用借出记录值作为键,提取对应的成员和物品记录#
    item2 = items[loan2[1]].decode().split(',')
    print('items:',item2)
    member2 = members[loan2[2]].decode().split(',')
    print('members:',member2)
    print('{} borrowed a {} on {}'.format(
        member2[1],item2[1],loan2[3]))
    
if __name__ == '__main__':
    main1()
    main2()
2.使用shelve作为持久化字典

#/usr/bin/python3
#coding:utf-8

import shelve

# ID, Name, Description, OwnerID, Price, Condition, DateRegistered
items = [
['1','Lawnmower','Tool','1','$150','Excellent','2012-01-05'],
['2','Lawnmower','Tool','2','$370','Fair','2012-04-01'],
['3','Bike','Vehicle','3','$200','Good','2013-03-22'],
['4','Drill','Tool','4','$100','Good','2013-10-28'],
['5','Scarifier','Tool','5','$200','Average','2013-09-14'],
['6','Sprinkler','Tool','1','$80','Good','2014-01-06'] 
]

# ID, Name, Email
members = [
['1', 'Fred', 'fred@lendylib.org'],
['2', 'Mike', 'mike@gmail.com'],
['3', 'Joe', 'joe@joesmail.com'],
['4', 'Rob', 'rjb@somcorp.com'],
['5', 'Anne', 'annie@bigbiz.com'],
]

# ID, ItemID, BorrowerID, DateBorrowed, DateReturned
loans = [
['1','1','3','4/1/2012','4/26/2012'],
['2','2','5','9/5/2012','1/5/2013'],
['3','3','4','7/3/2013','7/22/2013'],
['4','4','1','11/19/2013','11/29/2013'],
['5','5','2','12/5/2013','None']
]

def createDB(data, shelfname):
    try:
       shelf = shelve.open(shelfname,'c')
       for datum in data:
           key = datum[0]
           shelf[key] = datum
    finally:
       shelf.close()

def readDB(shelfname):
    try:
       shelf = shelve.open(shelfname,'r')
       return [shelf[key] for key in shelf.keys()]
    finally:
       shelf.close()

def main1():
    print('Creating data files...')
    createDB(items, 'itemshelf')
    createDB(members, 'membershelf')
    createDB(loans, 'loanshelf')

    print('reading items...')
    print(readDB('itemshelf'))
    print('reading members...')
    print(readDB('membershelf'))
    print('reading loans...')
    print(readDB('loanshelf'))

def main2():
    items = shelve.open('itemshelf','w')
    members = shelve.open('membershelf','w')
    loans = shelve.open('loanshelf','w')
    
    #与dbn区别:不再需要使用decode()把字节转换成普通字符串,不需要进行split()操作获得一个列表
    loan2 = loans['2']
    print('loan2:',loan2)
    item2 = items[loan2[1]]
    print('item2:',item2)
    member2 = members[loan2[2]]
    print('member2:',member2)

    print('{} borrowed a {} on {}'.format(
        member2[1],item2[1],loan2[3]))

if __name__ == "__main__": 
    main1()
    main2()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库角色和权限 2 通过本实验的学习,使学生能够掌握建立SQL Server数据库用户的方法,理解SQL Server的数据库角色病能够进行角色的定义,理解SQL Server的数据库权限,能够分配权限 二、实验内容 1、理解数据库角色和权限 在SQL Server Management Studio中创建三个登录帐户:log1、log2、log3。 利用第3章建立的LoanDB数据库,用log1登录,能否操作LoanDB数据库?为什么? 将log1、log2、log3映射为LoanDB数据库中的用户。 用log1登录,能否操作LoanDB数据库?为什么? 授予log1、log2、log3具有对BankT、LegalEntityT、LoanT三张表的查询权。 分别用log1、log2、log3登录,对上述三张表执行查询。 授予log1具有对BankT表的插入、删除权限。 用log2登录,对BankT表插入一行记录,会出现什么情况? 用log1登录,对BankT表插入一行记录,会出现什么情况? (10)在LoanDB数据库中建立用户角色:role1,并将log1、log2添加到此角色中。 (11)让log2具有LoanDB数据库中的全部数据的查询权,比较好的实现方法是什么? (12)如果拒绝role1查询BankT表,则log1、log2、log3是否有权查询BankT表?为什么? 2、请完成下题 新建一个数据库TGDB,然后在SQL Server中创建“SQL Server身份验证”模式的登录帐号:TG_User,其中账户密码为空,默认数据库为Master。并完成如下操作: 让TG_User成为TGDB数据库的合法用户。 在TGDB数据库中建用户自定义角色:MyRole,让TG_User成为MyRole角色中的成员。 用较好的方法授予MyRole在TGDB数据库中具有所有用户表的查询权。 三、实验报告 将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案、进行整理、分析总结,提出实验结论或自己的看法。 数据库备份和恢复 2 通过本实验的学生,使学生了解SQL Server的数据库备份方法,具备将SQL Server的数据库进行备份和对数据库备份进行数据恢复的能力。 二、实验内容 创建永久性备份设备:backup1,backup2,两个备份设备均存放在默认路径下。 按顺序完成下列备份操作: 将LoanDB数据库完全备份到backup1上; 对LoanDB数据库中的贷款表中的数据进行一些修改,然后将LoanDB数据库差异备份到backup2上; 在贷款表中插入一行新记录,然后将LoanDB数据库差异备份到backup2上; 在贷款表中插入一行新的记录,然后将LoanDB数据库日志备份到backup2上; 在贷款表中删除一行记录,然后对LoanDB数据库日志备份到文件上(d:\file1.bak); 在贷款表中删除一行记录。 对LoanDB数据库进行恢复。恢复顺序是什么样的?如果在恢复之前对数据库进行日志备份,则恢复完成后,第2题第(6)步删除的记录在数据库中存在不?如果在恢复之前不再对数据库进行日志备份,则恢复完成后,第2题第(6)步删除的记录在数据库中存在不? 实验报告 将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案、进行整理、分析总结,提出实验结论或自己的看法。
Python中可以使用批量插入的方式一次性插入多条语句到数据库。 首先,需要安装Python数据库操作模块,比如MySQLdb、psycopg2、pymysql等,以便能够连接数据库并操作数据。 其次,可以使用循环的方式生成多个插入语句的参数列表。例如,创建一个包含多个元组的列表,每个元组代表一条语句的参数。 然后,可以使用数据库操作模块提供的executemany()方法执行批量插入。这个方法接收两个参数,第一个参数是插入语句,第二个参数是参数列表。 最后,需要进行事务的提交。可以使用数据库连接对象提供的commit()方法。 下面是一个简单的示例,演示了如何使用Python进行批量插入多条语句到MySQL数据库: ```python import MySQLdb # 连接数据库 conn = MySQLdb.connect(host='localhost', user='root', passwd='password', db='test') cursor = conn.cursor() # 创建插入语句 insert_sql = "INSERT INTO table_name (column1, column2) VALUES (%s, %s)" # 创建参数列表 values = [ ('value1', 'value2'), ('value3', 'value4'), ('value5', 'value6') ] try: # 执行批量插入 cursor.executemany(insert_sql, values) # 提交事务 conn.commit() print("插入成功") except Exception as e: # 发生错误时回滚 conn.rollback() print(str(e)) finally: # 关闭数据库连接 cursor.close() conn.close() ``` 以上示例中,首先连接到数据库,然后创建插入语句,然后创建参数列表。接下来执行批量插入,如果成功则提交事务,失败则回滚。最后关闭数据库连接。 这样就可以一次性插入多条语句到数据库。注意要根据实际情况修改表名、列名、参数等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值