import sqlite3 as sq3
import pandas as pd
conn = sq3.connect("thisadatabase.db") #连接数据库
# def select2table(table):
# sql = (
# f'''
# select id, name, age, sex
# from {table}
# '''
# ) #需要执行的 sql 语句,在这里你需要拼接好 sql 语句,格式和 sqlite studio 里面的一样
# cur = conn.execute(sql) #调用
# var = cur.fetchall()
# cur.close()
# return var
sql = (
f'''
select id, name, age, sex
from person
'''
) #需要执行的 sql 语句,在这里你需要拼接好 sql 语句,格式和 sqlite studio 里面的一样
cur = conn.execute(sql) #执行 sql 语句,返回一个句柄,用来获取从数据库拉取的数据
getAll = False #是否获取全部内容,根据需要设定
if getAll:
var = cur.fetchall() #将所有结果拿出来,是一个数组,每一条包含每行的数据
print(var[0]) #打印第一条
else:
var = cur.fetchone() #将第一条拿出来,移动句柄到第二条
print(var) #这里会打印出第一条数据
var = cur.fetchone() #再获取一条数据
print(var) #这里打印出第二条数据
cur.close() #关闭句柄
conn.close() #关闭数据连接
另外,关于数据库日期时间格式的写入,可以很方便就能实现,只要是打开数据的时候设置一个参数,然后可以自动加 date 和 timestamp 转化成数据库可识别的数据类型:
import pandas as pd
import time
import datetime
import sqlite3 as sq3
import random
#连接数据库,没有会创建一个
conn = sq3.connect('hello.db', detect_types=sq3.PARSE_DECLTYPES) #这里设置 detect_types 之后,可以直接将 date 类型的数据传递进去,它会自动解析
#获取随机的时间戳
def get_random_timestamp():
a1 = (2019, 5, 1, 0, 0, 0, 0, 0, 0) #设置开始日期元组
a2 = (2019, 5, 31, 23, 59, 59, 0, 0, 0) #设置结束日期元组
start = time.mktime(a1) #生成开始时间戳
end = time.mktime(a2) #生成结束时间戳
t = random.randint(start, end) #在开始和结束时间戳中随机取出一个
# date_touple = time.localtime(t) #将时间戳生成时间元组
# date = time.strftime('%Y/%m/%d', date_touple) #将时间元组转成格式化字符串
# return date
return t
#创建表
sql = (
f'''
create table if not exists testtime(time0 DATE, time1 DATETIME, time2 TIME, time3 REAL, time4 timestamp)
'''
)
conn.execute(sql)
conn.commit()
#随机生成时间,将每个格式插入到创建的表格中去
for i in range(10):
timestamp = get_random_timestamp()
dt = datetime.datetime.fromtimestamp(timestamp)
# print(dt.date().strftime('%Y-%m-%d'))
# print(dt.strftime('%Y-%m-%d %H:%M:%S'))
# print(dt.time().strftime('%H:%M:%S'))
# sql = ( #插入时间格式的数据时,需要用单引号括起来,实际上它也是 text 的格式
# f'''
# insert into testtime (time0, time1, time2, time3)
# values('{dt.date().strftime('%Y-%m-%d')}', '{dt.strftime('%Y-%m-%d %H:%M:%S')}', '{dt.time().strftime('%H:%M:%S')}', {timestamp})
# '''
# )
#这里的 time0 是 date 类型, time1 是 datetime 类型, time2 是 time 类型, time3 是 python 这边的时间戳(浮点类型), time4 是 timestamp 类型
sql = (
f'''
insert into testtime (time0, time1, time2, time3, time4)
values('{dt.date()}', '{dt}', '{dt.time()}', {timestamp}, '{dt}')
'''
)
conn.execute(sql)
conn.commit()
conn.close()
然后读取的时候,可以看看他们的格式:
import pandas as pd
import time
import datetime
import sqlite3 as sq3
import random
#连接数据库,没有会创建一个
conn = sq3.connect('hello.db', detect_types=sq3.PARSE_DECLTYPES)
sql = (
f'''
select * from testtime
'''
)
cur = conn.execute(sql)
a = cur.fetchone()
for i in a:
print(i, type(i))
cur.close()
conn.close()
#打印
2019-05-19 <class 'datetime.date'>
2019-05-19 16:37:14 <class 'str'>
16:37:14 <class 'str'>
1558255034.0 <class 'float'>
2019-05-19 16:37:14 <class 'datetime.datetime'>