当您要插入一行(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) 当我绘制数据点与时间,跨越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 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不起作用,但如何使这个变量?)
如何获取对不是由 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) 基于关于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) 如果要更改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
当模块类不在我的脚本中但被其中一个模块使用时(我明确导入了)我如何捕获他的错误?
例如:
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 ×6
kivy ×2
aes ×1
checkbox ×1
cryptography ×1
datetime ×1
exception ×1
for-loop ×1
go ×1
import ×1
matplotlib ×1
plot ×1
postgresql ×1
python-3.x ×1
tkinter ×1
try-catch ×1
upsert ×1