sqlite3.OperationalError: database is locked

2018年6月24日 07:12

  • 情景描述
windows上的代码文件,设置为共享目录,mount到linux使用。运行python manage.py migrate命令,出现错误
 
  • 报错
[root@localhost sqlalchemy]# python manage.py db migrate
/root/py_env/coacs/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:794: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Traceback (most recent call last):
  File "/root/py_env/coacs/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
    context)
  File "/root/py_env/coacs/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 508, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
 
  • 原因
sqlite3与smb的lock冲突
 
  • 解决
sudo mount -t cifs //192.168.10.12/coacs /opt/coacs -o username=wyq,password=sprite,vers=1.0,nobrl
 
nobrl 表示不向服务器发送对 byte range lock 的请求。
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)

 

评论(0) 阅读(728)

python中如何防止sql注入

2018年6月10日 08:37

python访问数据库的底层库很多,以pymysql为例, 它在执行sql前,会对sql中的特殊字符进行转义,如
 
  • 字符转义
def escape_string(value, mapping=None):
    """escape_string escapes *value* but not surround it with quotes.

    Value should be bytes or unicode.
    """
    if isinstance(value, unicode):
        return _escape_unicode(value)
    assert isinstance(value, (bytes, bytearray))
    value = value.replace('\\', '\\\\')
    value = value.replace('\0', '\\0')
    value = value.replace('\n', '\\n')
    value = value.replace('\r', '\\r')
    value = value.replace('\032', '\\Z')
    value = value.replace("'", "\\'")
    value = value.replace('"', '\\"')
    return value
 
  • 执行sql的正确方法,不要在sql中拼接参数,字符转义只会针对参数args
# query作为sql模板,args为将要传入的参数
execute(query, args=None)
 
  • django/sqlalchemy
orm框架都是使用pymysql/MySQL-python等库,并且都使用execute(query,args)调用,将sql与参数分开传入。
 
  • sql注入检测工具
sqlmap
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)
 

Tags: db
评论(0) 阅读(846)

docker容器中不能ping

2018年6月10日 06:40

  • 描述
进入容器内,执行ping命令,提示缺少权限
docker exec -it deac /bin/bash
bash-4.3$ ping 192.168.1.100
PING 192.168.1.100 (192.168.10.100): 56 data bytes
ping: permission denied (are you root?)
 
  • 首先,查看当前用户
bash-4.3$ whoami
jenkins
 
  • 然后,再看看文件权限
缺少权限创建socket
# 查看ping权限
bash-4.3# ls -lsh /bin/ping
0 lrwxrwxrwx 1 root root 12 May  9  2017 /bin/ping -> /bin/busybox

#查看ping连接文件的权限
bash-4.3$ ls -lhs /bin/busybox
804K -rwr-xr-x 1 root root 803K Oct 26  2016 /bin/busybox
 
  • 方法一,临时方式,以root用户登录
docker exec -u root -it deac /bin/bash
 
  • 方法二,永久,添加s权限
#添加权限
chmod u+s /bin/ping  # 让用户在执行ping时,暂时拥有权限

#再查看权限
bash-4.3$ ls -lsh /bin/busybox
804K -rwsr-xr-x 1 root root 803K Oct 26  2016 /bin/busybox
 
此生必看的科学实验-水知道答案

 

评论(0) 阅读(802)

docker缩小镜像大小的六种方法

2018年6月03日 10:55

1.选择apline作为基础镜像

2.合并dockerfile中RUN命令

3.安装软件后,删掉源文件

4.导出的文件用gzip命令压缩

5.save命令多个镜像一起导出,缩小整体大小

6.多段构建
 
珍惜生命请勿杀害动物 01

 

评论(0) 阅读(750)

docker基础镜像怎么选?

2018年6月03日 10:40

先看看基础镜像的dockerfile,它们是怎么创建出来的。
  • scratch
空镜像
  • alpine
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
  • debian
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
  • centos/fedora/ubuntu
FROM scratch
ADD centos-7.4.1708-docker.tar.xz /

LABEL name="CentOS Base Image" \
    vendor="CentOS" \
    license="GPLv2" \
    build-date="20170911"

CMD ["/bin/bash"]
  • 建议
docker是容器不同于虚拟机,运行之后只有应用程序在里面运行,基础镜像只是为应用程序提供依赖包。应用程序是主,基础镜像是次。
如果没有必要,选择最小的依赖环境alpine,然后在这个基础上制作自己的镜像。
 
 
珍惜生命请勿杀害动物 01
珍惜生命请勿杀害动物 02
珍惜生命请勿杀害动物 03

 

评论(0) 阅读(712)

docker search怎么查详情

2018年6月03日 09:09

刚用docker search的人,看到查出一堆结果,此时会有两个疑问
 
1. 如何查详情?
答案是没有,docker没有查看详情的命令
 
2. 结果太多,哪个是最好的,该选哪个?
可以简单认为官方是最好的,热度高的是最好的。
 
* 显示官方
docker search [包名]  --filter "is-official=true"
* 过滤热度
docker search [包名] --stars=3
 
3. 建议
docker search真不实用,不如到官方网站查(http://hub.docker.com),上面有最详细的信息。得出结论后再docker pull到本地使用。
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)

 

评论(0) 阅读(668)

查看每个cpu核使用情况

2018年6月03日 00:12

  • 运行top命令,然后按1
Tasks: 226 total,   1 running, 225 sleeping,   0 stopped,   0 zombie
%Cpu0  : 33.3 us, 47.8 sy,  0.0 ni, 11.9 id,  0.0 wa,  5.9 hi,  1.1 si,  0.0 st
%Cpu1  : 33.1 us, 48.5 sy,  0.0 ni, 11.8 id,  0.0 wa,  6.2 hi,  0.4 si,  0.0 st
KiB Mem :  4024788 total,   862968 free,  1832492 used,  1329328 buff/cache
KiB Swap:  4157436 total,  4157436 free,        0 used.  1849656 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                
  4882 root      20   0  955352 355904   4548 S 163.0  8.8   2:20.43 python                                                                                 
   717 root      20   0  243524  11020   9736 S   0.3  0.3   0:20.52 vmtoolsd  
 
淨空法師:如何看待赌博与怎样戒赌

 

 

评论(0) 阅读(377)

服务接口,选择rpc还是http?

2018年6月02日 23:32

系统如果组件比较多,在做技术选型时,组件通信该选择rpc还是http呢?
有人说rpc性能好,有人偏向http,对此有些疑惑,有必要细细思维一下。
 
  • 从通信内容/功能上看

内容 rpc       http     
字符串 支持 支持
文件 可以支持 支持
对象(序列化) 支持 可以支持
 
http应用于web环境,rpc应用于分布式调度
从功能上看没有太大区别,很多情况下rpc与消息中间件结合通信实现分布式调度
 
  • 从用法上看

两者都是c/s结构,无太大区别
 
  • 从实现上看

类型 底层协议
rpc tcp(zerorpc)/http2(gRPC)
http http1.x/http2
 
  • 从性能上看

1. 听说rpc是长链接,http是三次握手。
长链接虽然,可以减少tcp开销,相对的它会导入新的缺点,是否会对连接数数量有限制呢?
 
2. 假如rpc的性能比http高,无非就是socket多连接了三次。如果http结合非阻塞io服务器(例如tornado),这三次连接开销真没啥消耗。
当然网络也会有一点消耗. 非阻塞io服务器可以将rpc与http的性能差距拉平
 
从链接开销上,比较性能问题,本就是错误,两者是在解决不同问题,所有没有必要在这个问题上纠结。请继续看下面
 
  • 从概念上看

rpc远程调用
http超文本传输协议
 
  • 该如何选择呢?

1. 思考这个问题,应该用最简单的方式,相信协议设计者,会选择最好方式来解决它面临的问题(毕竟协议代表着公认),我们只用关注它解决什么问题。
rpc解决什么问题呢?远程调用。"调用"属于程序内部之间。调用总不可能只传简单参数,会涉及到对象序列化,
这个对象在开发是代码总不会用两套吧,server与client很可能是在一起的属于一个组件.
 
2. 连接数不该是"调用"考虑的事。在创建一个全局连接后,不会再频繁创建连接. 如果rpc作为服务,频繁连接的场景不适合它
 
  • 总结

1.c与s关系
rpc远程调用,属于程序内部之间,c与s关系密切。
http,适合不同组件,c与s关系独立。
 
2.连接数
rpc叫调用,频繁连接的场景不适合它
http的应用的web环境,本就是频繁连接的场景
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)
 

评论(0) 阅读(352)

python3.6编码错误unable to load the file system codec

2018年6月02日 20:09

  • 情况描述
在windows中安装python、virtualenv后,启动cmd界面,使用virtualenv创建运行环境出现错误,意思是加载不了系统编码
 
c:\python36\Scripts\virtualenv.exe test
Fatal Python error: Py_Initialize: unable to load the file system codec
  • 解决办法
将cmd编码改为utf-8
chcp 65001
 

Tags: python3
评论(0) 阅读(464)

ldd查看依赖库

2018年6月02日 20:07

  • 查看依赖库
[root@localhost ~]# ldd /usr/bin/python
	linux-vdso.so.1 (0x00007ffcb7db2000)
	libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007ff75a7e2000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff75a5c3000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007ff75a3bf000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007ff75a1bc000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ff759e67000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ff759a82000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff75ae27000)

 

Tags: linux
评论(0) 阅读(296)