maxkey = max(len(key) for key in rec) # max key len for key in rec: # or: \t align print('%-*s => %s' % (maxkey, key, rec[key])) # -ljust, *len print(sept) def dumpdb(cursor, table, format=True): if not format: cursor.execute('select * from ' + table) while True: rec = cursor.fetchone() if not rec: break print(rec) else: from makedicts import makedicts recs = makedicts(cursor, 'select * from ' + table) showformat(recs) if __name__ == '__main__': import sys dbname, format, table = 'dbase1', False, 'people' cmdargs = sys.argv[1:] if '-' in cmdargs: # format if '-' in cmdline args format = True # dbname if other cmdline arg cmdargs.remove('-') if cmdargs: dbname = cmdargs.pop(0) if cmdargs: table = cmdargs[0] from loaddb import login conn, curs = login(dbname) dumpdb(curs, table, format)
""" 删除并重建数据库文件 """ import sys if input('Are you sure').lower() not in ('y', 'yes'): sys.exit() dbname = (len(sys.argv) > 1 and sys.argv[1]) or 'dbase1' table = (len(sys.argv) > 2 and sys.argv[2]) or 'people' from loaddb import login conn, curs = login(dbname) try: curs.execute('drop table ' + table) except: print('database table did not exist') command = 'create table % (name char(30), job char(10), pay int(4))' % table curs.execute(command) conn.commit() print('made', dbname, table)
""" run a query string, display formatted result table example: querydb.py dbase1 "select name, job from people where pay > 50000" """ import sys database, querystr = 'dbase1', 'select * from people' if len(sys.argv) > 1: database = sys.argv[1] if len(sys.argv) > 2: querystr = sys.argv[2] from makedicts import makedicts from dumpdb import showformat from loaddb import login conn, curs = login(database) rows = makedicts(curs, querystr) showformat(rows)
def consultas(): from makedicts import makedicts from dumpdb import showformat from loaddb import login conn, curs = login('Universidad') print "\n\n1.- Obtener los nombres y notas de los estudiantes así como el resultado de su solicitud de \ manera que tengan un valor de corrección menor que 1000 y hayan solicitado la carrera de \ Informática en la Universidad Complutense de Madrid.\n" rows = makedicts(curs, "SELECT nombre_est, nota \ FROM estudiantes, solicitudes \ WHERE estudiantes.id = solicitudes.id \ AND estudiantes.valor < 1000 \ AND solicitudes.carrera = 'Informatica' \ AND solicitudes.nombre_univ = 'Universidad Complutense de Madrid'") showformat(rows) print "\n\nObtener los estudiantes cuya nota ponderada cambia en más de\ un punto respecto a la nota original.\n" rows = makedicts(curs, "SELECT * \ FROM estudiantes \ WHERE estudiantes.nota - (estudiantes.valor * estudiantes.nota / 1000) > 1") showformat(rows) print '\n\nModificar la tabla solicitudes de forma que aquellos estudiantes que no solicitaron ninguna\ universidad, soliciten "Informática" en la "Universidad de Jaen".\n' rows = makedicts(curs, "SELECT id FROM estudiantes WHERE id NOT IN (SELECT id FROM solicitudes)") for row in rows: curs.execute('''INSERT INTO solicitudes VALUES (?, 'Universidad de Jaen', 'Informatica', 'No')''', (row["id"], )) rows = makedicts(curs, "SELECT * FROM solicitudes WHERE nombre_univ = 'Universidad de Jaen'") showformat(rows) print '\n\nAdmitir en la "Universidad de Jaen" a todos los estudiantes de Económicas quienes no \ fueron admitidos en dicha carrera en otras universidades.\n' rows = makedicts(curs, "SELECT id\ FROM solicitudes\ WHERE carrera = 'Economia'\ AND decision = 'No'\ AND nombre_univ != 'Universidad de Jaen'\ AND id NOT IN (SELECT id\ FROM solicitudes\ WHERE carrera = 'Economia'\ AND decision = 'Si')"); for row in rows: curs.execute('''INSERT INTO solicitudes VALUES (?, 'Universidad de Jaen', 'Economia', 'Si')''', (row["id"], )) rows = makedicts(curs, "SELECT * FROM solicitudes WHERE nombre_univ = 'Universidad de Jaen' AND carrera = 'Economia'") showformat(rows) print "\n\nBorrar a todos los estudiantes que solicitaron más de 2 carreras diferentes.\n" rows = makedicts (curs, 'SELECT id,count(DISTINCT carrera) AS c FROM solicitudes GROUP BY id HAVING c>2') for r in rows: curs.execute('DELETE FROM estudiantes WHERE id = ?',(r['id'], )) rows = makedicts(curs, 'SELECT * FROM estudiantes') showformat(rows)
############################################################################### # physically delete and recreate db files in mysql's data\ directory # usage: makedb.py dbname? (tablename is implied) ############################################################################### import sys dbname = (len(sys.argv) > 1 and sys.argv[1]) or 'peopledb' if raw_input('Are you sure?') not in ('y', 'Y', 'yes'): sys.exit() from loaddb import login conn, curs = login(db=None) try: curs.execute('drop database ' + dbname) except: print 'database did not exist' curs.execute('create database ' + dbname) # also: 'drop table tablename' curs.execute('use ' + dbname) curs.execute('create table people (name char(30), job char(10), pay int(4))') conn.commit() # this seems optional print 'made', dbname