zhoujun.g 发表于 2018-8-16 06:52:23

从零开始学Python-day7

##导入数据库  
In : import MySQLdb as mysql
  
##连接数据库
  
In : data = mysql.connect(user='root',passwd='123456',db='reboot',charset='utf8')
  

  
##建立游标,添加这行后数据库就初始化完成
  
In : cur = data.cursor()
  

  
In : data.autocommit(True)##设置自动提交,比较重要
  

  
##在ipython端添加数据
  

  
#在ipython段查询所有数据
  
In : cur.execute('select * from users')
  
Out: 1L
  

  
In : import datetime    #导入datetime
  

  
In : ##datetime模块可以实现在数据库中create_time生成时间
  

  
In : sql = "insert into users(name,name_cn,password,email,mobile,role,status,create_time) values ('cc'
  
    ...: ,'cc','cC23 ','CC@chinacache.com','CCC','user','0','%s') " %(datetime.datetime.now().strftime("%Y
  
    ...: -%m-%d%H:%M:%S"))
  

  
In : print sql
  
insert into users(name,name_cn,password,email,mobile,role,status,create_time) values ('cc','cc','cC23 ','CC@chinacache.com','CCC','user','0','2016-11-3016:04:33')
  

  
In : cur.execute(sql)
  
Out: 1L
  
#再次查询所有数据发现新增加了一条数据
  
In : cur.execute("select * from users;")
  
Out: 2L
  

  
##在mysql段查询所有数据确认新增数据
  
mysql> select * from users;
  
+----+------+---------+----------+-------------------+--------+------+--------+---------------------+-----------+
  
| id | name | name_cn | password | email             | mobile | role | status | create_time         | last_time |
  
+----+------+---------+----------+-------------------+--------+------+--------+---------------------+-----------+
  
|1 | ss   | ss      | ss123    | ss@chinacache.com | ssss   | user |      0 | 2016-11-30 15:37:48 | NULL      |
  
|2 | cc   | cc      | cC23   | CC@chinacache.com | CCC    | user |      0 | 2016-11-30 16:04:33 | NULL      |
  
+----+------+---------+----------+-------------------+--------+------+--------+---------------------+-----------+
  
2 rows in set (0.00 sec)
  

  
mysql>
  

  
##ipython交互下查找数据
  

  

  
###查询所有数据
  
In : select_sql = "select name,name_cn,password,email,mobile,role,status,create_time from users"
  

  
In : cur.execute(select_sql)
  
Out: 2L
  

  
In : res = cur.fetchall()      ##查找所有数据使用cur.fetchall(),单条数据则使用cur.fetchone()
  

  
In : print res
  
((u'ss', u'ss', u'ss123 ', u'ss@chinacache.com', u'ssss', u'user', 0, datetime.datetime(2016, 11, 30, 15, 37, 48)), (u'cc', u'cc', u'cC23 ', u'CC@chinacache.com', u'CCC', u'user', 0, datetime.datetime(2016, 11, 30, 16, 4, 33)))
  

  

  
###查询单条数据
  
In : select_sql = "select name,name_cn,password,email,mobile,role,status,create_time from users where
  
    ...: name = 'ss'"
  

  
In : cur.execute(select_sql)
  
Out: 1L
  

  
In : res = cur.fetchone()
  

  
In : print res
  
(u'ss', u'ss', u'ss123 ', u'ss@chinacache.com', u'ssss', u'user', 0, datetime.datetime(2016, 11, 30, 15, 37, 48))
  

  
In :
  

  
###ipython交互模式下查询所有数据以及将数据重组成我们想要的形式
  
In : select_sql = "select name,name_cn,password,email,mobile,role,status,create_time from users "
  

  
In : cur.execute(select_sql)
  
Out: 4L
  

  
In : res = cur.fetchall()
  

  
In : print res
  
((u'ss', u'ss', u'ss123 ', u'ss@chinacache.com', u'ssss', u'user', 0, datetime.datetime(2016, 11, 30, 15, 37, 48)), (u'cc', u'cc', u'cC23 ', u'CC@chinacache.com', u'CCC', u'user', 0, datetime.datetime(2016, 11, 30, 16, 4, 33)), (u'admin', u'admin', u'admin ', u'admin@cc.com', u'admin', u'admin', 0, datetime.datetime(2016, 11, 30, 16, 25, 17)), (u'TT', u'TT', u'tt123 ', u'tt@cc.com', u'123223', u'sa', 0, datetime.datetime(2016, 11, 30, 16, 26, 17)))
  

  
##思考:如何将上述res更改成为我们想要的字典形式
  
In : fields = ['name','name_cn','password','email','mobile','role','status','create_time']
  

  
原生实现方式:
  
In : select_sql = "select %s from users" %','.join(fields)
  

  
In : print select_sql
  
select name,name_cn,password,email,mobile,role,status,create_time from users
  

  
In : cur.execute(select_sql)
  
Out: 4L
  

  
In : res = cur.fetchall()
  

  
In : res
  
Out:
  
((u'ss',
  
u'ss',
  
u'ss123 ',
  
u'ss@chinacache.com',
  
u'ssss',
  
u'user',
  
0,
  
datetime.datetime(2016, 11, 30, 15, 37, 48)),
  
(u'cc',
  
u'cc',
  
u'cC23 ',
  
u'CC@chinacache.com',
  
u'CCC',
  
u'user',
  
0,
  
datetime.datetime(2016, 11, 30, 16, 4, 33)),
  
(u'admin',
  
u'admin',
  
u'admin ',
  
u'admin@cc.com',
  
u'admin',
  
u'admin',
  
0,
  
datetime.datetime(2016, 11, 30, 16, 25, 17)),
  
(u'TT',
  
u'TT',
  
u'tt123 ',
  
u'tt@cc.com',
  
u'123223',
  
u'sa',
  
0,
  
datetime.datetime(2016, 11, 30, 16, 26, 17)))
  

  
In : users = []
  

  
In : for row in res :
  
    ...:   user = {}
  
    ...:   for k ,v in enumerate(fields):
  
    ...:         user = row
  
    ...:   users.append(user)
  
    ...:
  

  
In : users
  
Out:
  
[{'create_time': datetime.datetime(2016, 11, 30, 15, 37, 48),
  
'email': u'ss@chinacache.com',
  
'mobile': u'ssss',
  
'name': u'ss',
  
'name_cn': u'ss',
  
'password': u'ss123 ',
  
'role': u'user',
  
'status': 0},
  
{'create_time': datetime.datetime(2016, 11, 30, 16, 4, 33),
  
'email': u'CC@chinacache.com',
  
'mobile': u'CCC',
  
'name': u'cc',
  
'name_cn': u'cc',
  
'password': u'cC23 ',
  
'role': u'user',
  
'status': 0},
  
{'create_time': datetime.datetime(2016, 11, 30, 16, 25, 17),
  
'email': u'admin@cc.com',
  
'mobile': u'admin',
  
'name': u'admin',
  
'name_cn': u'admin',
  
'password': u'admin ',
  
'role': u'admin',
  
'status': 0},
  
{'create_time': datetime.datetime(2016, 11, 30, 16, 26, 17),
  
'email': u'tt@cc.com',
  
'mobile': u'123223',
  
'name': u'TT',
  
'name_cn': u'TT',
  
'password': u'tt123 ',
  
'role': u'sa',
  
'status': 0}]
  

  
In :
  

  
###高阶的进阶方式代码(字典生成式 + 列表生成式 一行搞定)
  
In : users = ) for k ,v in enumerate(fields)) for row in res ]
  

  
###关闭游标和数据库
  
In : cur.close()
  

  
In : data.close()
页: [1]
查看完整版本: 从零开始学Python-day7