奇怪的错误,mysql插入到数据库的数据读出来不对,问题在哪儿?

奇怪的错误,插入到数据库的数据读出来不对,问题在哪儿?
小白一枚,请高手指教;
def get_last_date(conn):

ret=''
try:
    cursor = conn.cursor()
    query = '''select date from lastdate limit 1;'''
    cursor.execute(query)
    conn.commit()
    count_wm = cursor.fetchall()
    ret= count_wm[0][0]
    print(count_wm,ret)
except Exception as e:
    print(e)
'''
try:
    # 查询语句,选出employee表中的所有数据
    sql = 'select * from lastdate limit 1;'
    # read_sql_query的两个参数: sql语句, 数据库连接
    df = pd.read_sql_query(sql, engine)
    # 输出employee表的查询结果
    ret=df['lastdate'].values[0]
except Exception as e:
    print(e)
'''
return ret

def set_last_date(conn):

cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS lastdate")####
sql = 'create table if not exists lastdate(date varchar(12) not null,temp int,primary key(`date`))'
cursor.execute(sql)
conn.commit()
dt=datetime.datetime.now().date().strftime("%Y-%m-%d")
sql = '''insert into lastdate (date,temp) values({},0);'''.format(dt)
print(sql)
print('hhh')
try:
    cursor.execute(sql)
    conn.commit()
except Exception as e:
    print(e)
    conn.rollback()
    print('插入失败')
#finally:
    # 关闭连接
    #conn.close()

set_last_date(conn)
lastdt=get_last_date(conn)
print(type(lastdt),lastdt)#str

    显示
    insert into lastdate (date,temp) values(2020-09-24,0);

hhh
(('1987',),) 1987
<class 'str'> 1987image.png

阅读 2.1k
2 个回答

set_last_date里的date值要加引号,改成如下:

sql = '''insert into lastdate (date,temp) values('{}',0);'''.format(dt)

date是varchar类型,但插入没加入引号的2020-09-24会被转化成'1987'

为什么是1987,不是别的值,为什么能插入?尝试执行insert into lastdate (date,temp) values(2020-09-25,0);结果值变为1986!!变小了,原以为是根据ASCII转换的,仔细一看原来是当成算术进行减法,最后的值再直接隐式转换成varchar,有点意思。

谢谢,可以了;mysql 与python语法特性差异好大,看来还得好好学习

另外,可以直接采用mysql Date数据类型吗?尝试半天总是语法错误。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题