栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础案例 - MySQL 数据库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础案例 - MySQL 数据库

例12-1 MySql中查询学号前面2位为“17”、出生日期在” 1998-01-01”以后的、年龄大于等于21岁的学生,结果按出生日期降序排序。

Select sNo,sname,sex,dtbirthdate,year(now())-year(dtbirthdate) '年龄' from S 
where left(sNo,2)='17' and year(now())-year(dtbirthdate) >=21 and 
date_format(dtbirthdate,'%Y-%m-%d')>'1998-01-01' order by dtbirthdate desc;

结果:

使用了Navicat Premium数据库可视化软件

例12-2 Python查询MySQL数据表记录。
基本思路:游标(cursor)执行查询语句后,返回的是元组变量,可以通过元组的索引,访问查询的结果。

import pymysql
conn=pymysql.connect(   # 建立链接
    host='127.0.0.1',#我的IP地址
    port=3306,   # 不是字符串不需要加引号。
    user='root',
    password='123',
    db='stock1',
    charset='utf8')
cur = conn.cursor()                                         # 定义游标
strSQL = "select * from s"
cur.execute(strSQL)                                         # 执行SQL语句
rows = cur.fetchall()  # 获取游标所有行记录,返回元组变量
print("学号ttt姓名tt年龄")
print("------------------------")
for r in rows:                                                    # 遍历元组
    print ("%st%stt%s" % (r[0], r[1], r[2]))
cur.close()                                                         # 用完,立即关闭对象,先关游标,再关连接
conn.close()

结果:
例12-3 Python更新MySQL数据表记录。
基本思路:游标(cursor)执行更新SQL语句后,返回一个整数变量,表示影响记录的条数。但这还只是在数据缓冲区中,若要影响到数据库中,需要调用连接对象connection的commit()方法,进行提交;如果失败,就自动回滚rollback()。

import pymysql
conn = pymysql.connect(
host='127.0.0.1', port=3306, user='root', password='123', database='stock1', charset='utf8')
cursor = conn.cursor()# 获取一个光标
try:
    sql = 'insert into S(SNo, Sname, Age, Sex, dtBirthDate) values(%s,%s,%s,%s,%s);'
    data = [('19011103', '张三', 22,'m','1998-1-2'),
        ('19011102', '李四', 22,'f','1997-1-2'),
        ('19011101', '王五', 22,'m','1996-1-2')]
    cursor.executemany(sql, data) # 拼接并执行sql语句
    conn.commit()# 涉及写操作要注意提交
    print("数据插入成功!影响行数:", cursor.rowcount)
except pymysql.Error as e:
    conn.rollback(); print("插入错误!错误信息:", e.args[1])
cursor.close()  ;
conn.close()    # 关闭光标和连接

结果:


例12-4文件《股票日交易数据20120425.xls》收录了我国A股所有股票2012.04.25日的日交易数据,共3173条记录,如表所示。
各列含义:1)Symbol股票代码,2)Name股票名称,3) Date交易日期,
4)Open开盘价, 5)High最高价,6)Low 最低价,7)Close 收盘价,
8)Change1涨幅,9)Volume成交量(手), 10)Amount成交额(元),
11)TurnoverRate 换手率;
将excel中的内容全部导入数据库。
SQL建表:

CREATE TABLE smStock 	  
(
cStockNo	                      char(8)		  not null,		 
vcStockName	   varchar(20)	  not null,		 
dcLTP		   decimal(14,6)  not null default 0,                
dtUsertime	   datetime	  not null default now(),               
constraint smStock_pk primary key(cStockNo)                               
);
CREATE TABLE trDay 	
(
cStockNo	                  char(8)	not null,		                          
cDay		datetime	not null,		                           
mOpen		real		not null default 0,	         
mHigh		real		not null default 0,	         
mLow		real		not null default 0,	         
mClose		real		not null default 0,	         
iVol		real		not null default 0,	         
mm		real		not null default 0,	         
dcChange                   decimal(8,4) not null default 0,	                           
dcRate 		decimal(6,2) not null default 0,	                            
constraint trDay_pk primary key(cStockNo,cDay),                
constraint trDay_fk foreign key(cStockNo) references smStock(cStockNo)     
);

python将excel信息插入数据库:

import numpy as np;
import xlrd ;
import pymysql
from datetime import datetime
from xlrd import xldate_as_tuple
stock = xlrd.open_workbook(r"C:pythonFilespythonProject教材各章数据教材各章数据第12章数据股票日交易数据20120425.xls")
sheet = stock.sheet_by_index(0)                                   # 通过索引获取sheet
rows = sheet.nrows                                                        # 获得E行数,cols=sheet.ncols 为获得列数
conn = pymysql.connect(host="127.0.0.1",user='root', password="featherP@ssw0rd", database='mytest')
cur = conn.cursor()                                                       # 创建游标对象
conn.begin()                                                                     # 开始事务
for i in np.arange(1,rows):
    row = sheet.row_values(i)                                        # 获得第i 行,为 list
    cStockNo = row[1].strip()                                        # 股票代码
    vcStockName = row[2]                                             # 股票名称
    sCell = row[3]                                                           # 交易日期
    date = datetime(*xldate_as_tuple(sCell, 0))           # 处理日期型
    cDay = date.strftime('%Y-%m-%d')  #('%Y/%m/%d %H:%M:%S')
    mOpen = str(row[4])                                                 # 开盘价
    mHigh = str(row[5])                                                 # 最高价
    mLow = str(row[6])                                                  # 最低价
    mClose = str(row[7])                                                 # 收盘价
    dcRate = str(row[8])                                                  # 涨幅
    iVol = str(row[9])                                                       # 成交量(手)
    mm = str(row[10])                                                     # 成交额(元)
    dcChange = str(row[11])                                           # 换手率
# ------------------ 先插入股票基本信息 -------------------------------------------------
    sql="select cStockNo from smStock where cStockNo='"+cStockNo+"'"
    cur.execute(sql)                                   # 检查该股票信息是否已经在表中
    n = cur.rowcount                                 # 执行查询语句,返回的记录行数
    if n == 0:                                              # 若不在股票基本信息表中,则插入股票基本信息
        sql = "insert into smStock(cStockNo,vcStockName)"
        sql = sql + " values('"+cStockNo+"','"+vcStockName+"')"
        cur.execute(sql)                               # 执行SQL语句
        sql = "insert into trDay(cStockNo,cDay,mOpen,mHigh, mLow,"
        sql = sql + "mClose,iVol,mm,dcChange,dcRate) values('"
        sql = sql + cStockNo+"','"+cDay+"',"+mOpen+","+mHigh+","
        sql = sql + mLow +","+ mClose+","+iVol+","+mm+","
        sql = sql +dcChange+","+dcRate + ")"
        cur.execute(sql)         #---------------- 再插入股票日交易记录 --------------------------
try:
    conn.commit()                                # 数据更新,最后一次性提交,否则不会保存到数据库中
    print("一次性全部导入成功!")
except pymysql.Error as e:
    conn.rollback()
    print ("导入失败!错误信息:",e.args[1] )
cur.close()
conn.close()

结果:


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号