python pymysql日期时间

平台:win7  python3.6+pymsql ;mysql8.0.11    2018/7/11  tcy  Shanghai Yexie

1. 日期时间格式

    日期时间用%s

    日期 %s

    时间%s

2. 说明:   

       2.1) 用str_to_date(\'%s\','%%H:%%i:%%S')和上面功能一样,没有必要用。

       2.2)在python中print显示和数据库中显示的不一致,这个我搞了好久才看到

               dt_now=dt.strftime('%Y-%m-%d %H:%M:%S') python print和mysql数据库中显示一致;

               date_now=dt.strftime('%Y-%m-%d')                 python print和mysql数据库中显示一致;

               time_now=time.strftime('%H:%M:%S',time.localtime()) 

                     python print和mysql数据库中显示不一致;print 显示:     datetime.timedelta(0, 84249),

                                                                                        数据库中显示: '23:24:09'

       2.3) 其他格式有:

                          %d整数,%f浮点数,%s(字符串)

3.例   以下为读写期货合约数据

# -*- coding: utf-8 -*-
import pymysql
import datetime ,time
dt=datetime.datetime.now()
dt_now=dt.strftime('%Y-%m-%d %H:%M:%S')
date_now=dt.strftime('%Y-%m-%d')
##time_now=dt.strftime('%H:%M:%S')
time_now=time.strftime('%H:%M:%S',time.localtime())




#------------------------------------------------------------------------------
#1. 连接数据库
db_conn = pymysql.connect(host = 'localhost', user= 'root', passwd = 'root',
                          database='new_futures',port=3306,charset='utf8')


# 获取操作游标
cursor = db_conn.cursor()
# 使用 execute 方法执行SQL语句
cursor.execute("SELECT VERSION()")


# 使用 fetchone 方法获取一条数据库。
dbversion = cursor.fetchone()


print ("Database version : %s " % dbversion) #Database version : 8.0.11


#------------------------------------------------------------------------------
#2. 创建数据库
cursor.execute("create database if not exists new_futures")


# 选择要操作的数据库
db_conn.select_db('new_futures');
cursor.execute("drop table if exists m1809")
db_conn.commit()
# 创建数据表SQL语句
sql = """CREATE TABLE if not exists m1809(
         No  INT NOT NULL,
         name CHAR(20) NOT NULL,
         code CHAR(10) NOT NULL,
         datetime DATETIME NOT NULL,
         date DATE NOT NULL,
         time TIME NOT NULL,
         open FLOAT NOT NULL,
         high FLOAT NOT NULL,
         low FLOAT NOT NULL,
         close FLOAT NOT NULL,
         vol FLOAT NOT NULL
          )"""
try:
    cursor.execute(sql)
except Exception as e:
    # Exception 是所有异常的基类,这里表示捕获所有的异常
    print ("Error to create table:", e)
##str_db=pymysql.STRING
# 插入数据
sql = """INSERT INTO m1809(No,name,code,datetime,date,time,open,high,low,close,vol)
         VALUES ('%d','%s', '%s','%s','%s', str_to_date(\'%s\','%%H:%%i:%%S'),'%f', '%f', '%f', '%f', '%f')"""
m1809s = (
        {"No": 0, "name": "豆粕", "code": 'm1809', "datetime": dt_now,"date": "2018-7-9", "time":time_now,"open": 3100, "high": 3150, "low": 3000, "close": 3110, "vol": 254672},
        {"No": 1, "name": "豆粕", "code": 'm1809', "datetime": dt_now,"date": "2018-7-10", "time":time_now, "open": 3000, "high": 3000, "low": 2900, "close": 2950, "vol": 154672},
        {"No": 2, "name": "豆粕", "code": 'm1809',"datetime": dt_now, "date": date_now, "time":time_now, "open": 2900, "high": 3050, "low": 2920, "close": 2950, "vol": 244670},
        {"No": 3, "name": "豆粕", "code": 'm1809',"datetime": dt_now, "date": "2018-7-12", "time":time_now, "open": 3020, "high": 3150, "low": 3000, "close": 3192, "vol": 354677},
        {"No": 4, "name": "豆粕", "code": 'm1809',"datetime": dt_now, "date": "2018-7-13", "time":time_now, "open": 3105, "high": 3159, "low": 3004, "close": 3119, "vol": 264678}
        )

try:
    # 清空表中数据
    cursor.execute("delete from m1809")
    # 执行 sql 插入语句
    for m1809 in m1809s:
        cursor.execute(sql % (m1809["No"], \
            m1809["name"], \
            m1809["code"], \
            m1809["datetime"], \
            m1809["date"], \
            m1809["time"], \
            m1809["open"], \
            m1809["high"], \
            m1809["low"], \
            m1809["close"], \
            m1809["vol"]))
    # 提交到数据库执行
    db_conn.commit()
    # 对于支持事务的数据库, 在Python数据库编程中,
    # 当游标建立之时,就自动开始了一个隐形的数据库事务。
    # 用 commit 方法能够提交事物
except Exception as  e:
    # Rollback in case there is any error
    print ("Error to insert data:", e)
    #b_conn.rollback()

print( "Insert rowcount:", cursor.rowcount )
# rowcount 是一个只读属性,并返回执行execute(方法后影响的行数。)

# 数据库查询操作:
#    fetchone()      得到结果集的下一行
#    fetchmany([size=cursor.arraysize])  得到结果集的下几行
#    fetchall()      返回结果集中剩下的所有行
try:
    # 执行 SQL
    cursor.execute("select * from m1809")


    # 获取一行记录
    rs = cursor.fetchone()
    print( rs )


    # 获取余下记录中的 2 行记录
    rs = cursor.fetchmany(2)
    print( rs)


    # 获取剩下的所有记录
    ars =  cursor.fetchall()
    for rs in ars:
        print( rs)
    # 可以用 fetchall 获得所有记录,然后再遍历
except Exception as e:
    print ("Error to select:", e)


# 数据库更新操作
sql = "UPDATE m1809 SET vol = vol + 100000 WHERE date = '%s'" % ('2018-7-11')
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    db_conn.commit()
    cursor.execute("select * from m1809")
    ars =  cursor.fetchall()
    print ("After update: ------" )
    for rs in ars:
        print (rs )
except Exception as  e:
    # 发生错误时回滚
    print ("Error to update:", e )
    db_conn.rollback()


# 关闭数据库连接

db_conn.close()

***************************************************************************************************

显示结果:

*** Remote Interpreter Reinitialized  ***
>>> 
Database version : 8.0.11 
C:\python36\lib\site-packages\pymysql\cursors.py:170: Warning: (1007, "Can't create database 'new_futures'; database exists")
  result = self._query(query)
Insert rowcount: 1
(0, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 9), datetime.timedelta(0, 85927), 3100.0, 3150.0, 3000.0, 3110.0, 254672.0)
((1, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 10), datetime.timedelta(0, 85927), 3000.0, 3000.0, 2900.0, 2950.0, 154672.0), (2, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 11), datetime.timedelta(0, 85927), 2900.0, 3050.0, 2920.0, 2950.0, 244670.0))
(3, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 12), datetime.timedelta(0, 85927), 3020.0, 3150.0, 3000.0, 3192.0, 354677.0)
(4, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 13), datetime.timedelta(0, 85927), 3105.0, 3159.0, 3004.0, 3119.0, 264678.0)
After update: ------
(0, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 9), datetime.timedelta(0, 85927), 3100.0, 3150.0, 3000.0, 3110.0, 254672.0)
(1, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 10), datetime.timedelta(0, 85927), 3000.0, 3000.0, 2900.0, 2950.0, 154672.0)
(2, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 11), datetime.timedelta(0, 85927), 2900.0, 3050.0, 2920.0, 2950.0, 344670.0)
(3, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 12), datetime.timedelta(0, 85927), 3020.0, 3150.0, 3000.0, 3192.0, 354677.0)
(4, '豆粕', 'm1809', datetime.datetime(2018, 7, 11, 23, 52, 7), datetime.date(2018, 7, 13), datetime.timedelta(0, 85927), 3105.0, 3159.0, 3004.0, 3119.0, 264678.0)
>>> 

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/81008597
今日推荐