小编Seb*_*ian的帖子

PostgreSQL INSERT ON CONFLICT UPDATE(upsert)使用所有排除的值

当您要插入一行(PostgreSQL> = 9.5),并且您希望可能的INSERT与可能的UPDATE完全相同时,您可以这样写:

INSERT INTO tablename (id, username, password, level, email) 
                VALUES (1, 'John', 'qwerty', 5, 'john@mail.com') 
ON CONFLICT (id) DO UPDATE SET 
  id=EXCLUDED.id, username=EXCLUDED.username,
  password=EXCLUDED.password, level=EXCLUDED.level,email=EXCLUDED.email
Run Code Online (Sandbox Code Playgroud)

有更短的方式吗?只是说:使用所有EXCLUDE值.

在SQLite我以前做过:

INSERT OR REPLACE INTO tablename (id, user, password, level, email) 
                        VALUES (1, 'John', 'qwerty', 5, 'john@mail.com')
Run Code Online (Sandbox Code Playgroud)

postgresql upsert postgresql-9.5

108
推荐指数
2
解决办法
11万
查看次数

Matplotlib日期自动收报机 - 没有明显原因超出Locator.MAXTICKS错误

当我绘制数据点与时间,跨越2天时,我设置了一个0和30分钟的datelocator.每半小时一次主要的滴答,matplotlib会抛出一个错误.考虑这个例子:

from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

datapoints = 3600*24*2   #2 days, 1 datapoint/second
data = range(datapoints)  #anydata
timestamps = [ datetime.fromtimestamp(t) for t in range(datapoints) ]

fig = plt.figure()
ax = fig.add_subplot(1,1,1)   
ax.xaxis.set_major_locator(mdates.MinuteLocator(byminute=[0,30]))

plt.plot(timestamps,data)
plt.show()
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

RuntimeError:RRuleLocator估计从1970-01-01 01:00:00 + 00:00到1970-01-03 00:59:59 + 00:00:生成2879个刻度超过Locator.MAXTICKS*2(2000)

2879个刻度正好是该时间跨度内的分钟数,这意味着估计值基于每分钟1个刻度.然而,定位器应每30分钟产生1个滴答(48小时内每小时2个滴答= 96个滴答).到目前为止,为什么估计和实际价值相互之间?

解决方法是提高MAXTICKS值:

locator = mdates.MinuteLocator(byminute=[0,30])
locator.MAXTICKS = 1500
ax.xaxis.set_major_locator(locator)
Run Code Online (Sandbox Code Playgroud)

这是有效的,图表很好地显示.但是,这不应该是正确的吗?为什么这个错误首先发生?我是否使用了datelocator?

python plot datetime matplotlib python-3.x

16
推荐指数
1
解决办法
8091
查看次数

如何在python tkinter中的for循环中从列表创建多个复选框

我有一个可变长度列表,并希望为列表中的每个条目创建一个复选框(使用python TKinter)(每个条目对应一个应该使用复选框打开或关闭的机器 - >更改字典中的值) .

print enable
{'ID1050': 0, 'ID1106': 0, 'ID1104': 0, 'ID1102': 0}
Run Code Online (Sandbox Code Playgroud)

(例如,可以是任何长度)

现在相关代码:

for machine in enable:
    l = Checkbutton(self.root, text=machine, variable=enable[machine])
    l.pack()
self.root.mainloop()
Run Code Online (Sandbox Code Playgroud)

此代码生成4个复选框,但它们全部勾选或未勾选,并且enabledict中的值不会更改.怎么解决?(我认为这l不起作用,但如何使这个变量?)

python checkbox for-loop tkinter

8
推荐指数
1
解决办法
2万
查看次数

Kivy:获取在Python中添加的小部件内的父级

如何获取对不是由 kvlang 添加而是在 python 中添加的小部件内的父级的引用。通常,如果小部件在 python 中添加到父级,则您只需调用即可self.parent返回。Null

一个例子:

import kivy
kivy.require('1.9.0') # replace with your current kivy version !

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.clock import Clock

kvlang = '''
<ScreenManagement>:
    ScreenOne:

<ScreenOne>:
    name: 'First'


<ScreenTwo>:
    name: 'Second'

'''


class ScreenManagement(ScreenManager):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)

        def setup(*args):
            self.add_widget(ScreenTwo())    #add ScreenTwo later in python

        Clock.schedule_once(setup)

class ScreenOne(Screen):
    def __init__(self,**kwargs):
        super().__init__()

        def setup(*args):
            print("Parent of ScreenOne: {}".format(self.parent))        #this is working
        Clock.schedule_once(setup)

class …
Run Code Online (Sandbox Code Playgroud)

python kivy

6
推荐指数
1
解决办法
8554
查看次数

在 Golang 中解密在 Python AES CFB 中加密的内容

基于关于CFB 解密Golang 文档,我编写了一个最小的工作示例来解密使用 AES CFB 加密的字符串,然后在 python3 中进行 base 64 编码。

当消息在 Golang 中加密时,golang 解密工作正常(使用来自 Golang doc 示例的加密函数)。但是,当我使用 python 加密包在 python 脚本中加密消息时,我无法在 golang 脚本中成功解密它。我没有得到正确的字节。

$ python3 stack.py 
Going to encrypt and base64 "This is not encrypted" result:
b'jf9A5LCxKWPuNb1XiH+G3APAgR//'

Now going to call the Golang script:
b'Hello from Golang, going to decrypt: jf9A5LCxKWPuNb1XiH+G3APAgR//
Result:  Tl!\xca/\xf1\xc0\xb2\xd01Y\x02V\xec\xdf\xecy\xd38&\xd9\n'
Run Code Online (Sandbox Code Playgroud)

两种 AES 实现的块大小默认为 16。

所以问题是:出了什么问题?

高朗脚本:

$ python3 stack.py 
Going to encrypt and base64 "This is not encrypted" result:
b'jf9A5LCxKWPuNb1XiH+G3APAgR//'

Now going …
Run Code Online (Sandbox Code Playgroud)

python cryptography aes go

6
推荐指数
1
解决办法
1802
查看次数

Kivy:如何从kvlang中的任何屏幕内访问嵌套的屏幕管理器

如果要更改kvlang中的root screenmanager,可以在任何屏幕中执行以下操作:

Button:
    text: 'press me to change the screen of the root manager'
    on_press: app.root.current = 'name_of_target_screen'
Run Code Online (Sandbox Code Playgroud)

或者,如果此按钮位于屏幕管理器管理的屏幕上,则可以执行以下操作:

Button:
    text: 'press me to change the current screen'
    on_press: root.manager.current = 'name_of_target_screen'
Run Code Online (Sandbox Code Playgroud)

但是,当您有这样的嵌套屏幕管理器时:

[Root screen manager]
     [screen 1]
     [screen 2]
       [BoxLayout]
          [sidescreen]
              [button to change nested screen manager]
          [nested screen manager]
              [nested screen 1]
              [nested screen 2]
Run Code Online (Sandbox Code Playgroud)

我不知道如何从[sidescreen]内部更改嵌套的屏幕管理器,因为我不知道如何引用它。有人知道吗?

一个最小的工作示例:http : //pastebin.com/1i5Ysbu3

python kivy

5
推荐指数
1
解决办法
605
查看次数

python尝试,除了未明确导入的模块的错误

当模块类不在我的脚本中但被其中一个模块使用时(我明确导入了)我如何捕获他的错误?

例如:

from sqlite3 import dbapi2 as sqlite

class sqldb:

def __init__(self):
  self.sqlite.connect('records.db')
  self.c = self.conn.cursor()    

def query(self,query,values)
 try:
  self.c.execute(query, values)
  self.conn.commit()
 except sqlite3.OperationalError:
  print "SQLite DB locked"
Run Code Online (Sandbox Code Playgroud)

将导致(当数据库被锁定时):

NameError: global name 'sqlite3' is not defined
Run Code Online (Sandbox Code Playgroud)

但是当我没有发现错误时,它确实给出了我的异常:'sqlite3.OperationalError'

那么我应该把它作为除外?或者我应该导入整个sqlite3模块?如果是,这不会增加我的程序的资源占用空间吗?

python import exception try-catch

2
推荐指数
2
解决办法
8720
查看次数