码迷,mamicode.com
首页 > 数据库 > 详细

sqlite3

时间:2019-07-13 16:15:55      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:empty   data-   mysq   raft   隔离级别   json   proxy   opera   code   

 

 

####################################################################

sqlite学习:
参考:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017801751919456
https://www.runoob.com/sqlite/sqlite-intro.html
https://www.cnblogs.com/xiaobingqianrui/p/8461707.html

SQLite是一种嵌入式数据库,它的数据库就是一个文件。
Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。 sqlite3数据库和sqlite3驱动
Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。
由于SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库。
如果该数据库操作不需要返回结果,就直接使用conn.execute查询,根据数据库事物隔离级别的不同,可能修改数据库需要conn.commit
如果需要返回查询结果则用conn.cursor创建游标对象cur,通过cur.execute查询数据库,
cursor方法有fetchall、fetchone、fetchmany返回查询结果,根据数据库事物隔离级别不同,可能修改数据库需要coon.commit

####################################################################


1.挂载

问题:
import sqlite3
conn = sqlite3.connect(‘source_data.db‘)
报错:sqlite3.OperationalError: unable to open database file
touch source_data.db
报错:touch: cannot touch ‘source_data.db‘: Permission denied

解决:
宿主机修改目录权限为完全控制
settings:共享盘--凭证--apply
容器:run
使用PowerShell


2.建表

问题:
向数据库提交数据时自动记录时间,显示本地时间
容器时区修改为东八区:https://jingyan.baidu.com/article/fec7a1e5ec8e341191b4e75f.html

数据类型

navicat查看表结构
https://blog.csdn.net/duanliuchang/article/details/79462376
https://jingyan.baidu.com/album/ff411625e4342f12e4823787.html?picindex=5


char与varchar的差异
一个字符占用多少个字节取决于所使用的字符集
char与varchar后面接的数据大小为存储的字符数,而不是字节数
char定义的是固定长度, 用空格补全存入数据库中, 取char的数据时,会把后面的空格全部丢弃掉
varchar是变长长度, 不会在后面补空格, 取varchar数据时,尾部空格会保留

sqlite3数据类型:
https://www.runoob.com/sqlite/sqlite-data-types.html
https://blog.csdn.net/xingfeng0501/article/details/7817121
text:
https://blog.csdn.net/xingfeng0501/article/details/7817121


cursor.execute(‘create table test0(
id integer not null primary key autoincrement,
createdate timestamp not null default (datetime(\‘now\‘,\‘localtime\‘)),
etpsName varchar(255) default null,
product_id varchar(255) default null,
web_name varchar(255) default null,
to_server varchar(255) default null,
parameters text
)‘)

cursor.execute(‘create table test0(id integer not null primary key autoincrement,createdate timestamp not null default (datetime(\‘now\‘,\‘localtime\‘)),etpsName varchar(255) default null,product_id varchar(255) default null,web_name varchar(255) default null,to_server varchar(255) default null,parameters text)‘)

3.提取数据,写入库代码

id #自动生成
createdate #自动生成
etpsName #request.urlencoded_form # parameters_dict[‘etpsApp.etpsName‘]
product_id #name = str(random.random())
web_name #flow.request.host #域名
to_server #flow.request.url #完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数
parameters #request.urlencoded_form #parameters_dict
flow.request.urlencoded_form #MultiDictView,content-type:application/x-www-form-urlencoded时的请求参数,不包含url直接带的键值参数

序列化:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017624706151424
dict--json--file/net
一种轻量级的数据交换格式
所谓序列化就是写入到文件,反序列化就是从文件中写读到到程序中成为对应语言的数据类型.
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

针对http,常用的API:
https://www.jianshu.com/p/a495cc016682
https://mitmproxy.readthedocs.io/en/v2.0.2/scripting/api.html#http

request.text

encode--bytes
decode--str

try:
被检测的代码块
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑

Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值
dict.get(key, default=None)


部署测试:
worker_c

tasks.py
save_sqlite.py

apt-get update
apt-get install vim

问题:
1.
/etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/etc/timezone Asia/Shanghai

clocks are out of sync
修改时区后造成celery worker_c warning级错误
修改回来

2.
绝对路径连接库
变量插入sqlite3
https://blog.csdn.net/iteye_16691/article/details/81682968

3.
挂载目录的权限问题:
settings:共享盘--凭证--apply
容器:run
使用PowerShell

4.
入库的数据与期待的不符

5.
空数据
修改代码:对pageName为空加一个判断

6.
修改股东信息mysql存入两条
修改save_to_mysql.py

docker run -e QUEUE=to_create --name worker_c --link yct_redis:aliyun_redis -v d:/git_jst/sqlite3/data_all:/code/data_all -d daocloud.io/xjinjin/yct_worker:v7
cursor.execute(‘create table check0(id integer not null primary key autoincrement,createdate timestamp not null default (datetime(\‘now\‘,\‘localtime\‘)),num varchar(255) default null)‘)

docker cp D:\git_jst\project\yct_worker\handle_data\tasks-v1.py worker_c:/code/handle_data/tasks.py
docker cp D:\git_jst\project\yct_worker\handle_data\draft.py worker_c:/code/handle_data/save_to_mysql.py
docker cp D:\git_jst\project\yct_worker\proxy_yct\middle_tool.py yct_proxy:/code/proxy_yct/save_sqlite.py

docker commit -m="add sqlite3" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v1
docker commit -m="add vim" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v2
docker commit -m="add test.py" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v3
docker commit -m="change tasks.py&save_sqlite.py" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v4
docker commit -m="change save_to_mysql.py" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v5
docker commit -m="The initial environment for solving null data conditions" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v6
docker commit -m="Add a judgment to the pageName is empty" -a="xjj" worker_c daocloud.io/xjinjin/yct_worker:v7

docker commit -m="change middle_tool.py" -a="xjj" yct_proxy daocloud.io/xjinjin/yct_proxy:v1


连接的问题 mitm依次单个的触发每个请求 CELERYD_CONCURRENCY = 4:celery每次并发4个worker进程并且还有预取4个抢任务执行

####################################################################

 

sqlite3

标签:empty   data-   mysq   raft   隔离级别   json   proxy   opera   code   

原文地址:https://www.cnblogs.com/xujinjin18/p/11180941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!