嗨,我正在尝试根据带有通配符的用户输入搜索SQlite表.我已经尝试了不同的方法,因为我无法让它发挥作用.这是我尝试的最后一件事,它实际上是我在这里找到的解决方案,但在python 3中可能已经改变了.
search = input("type name or partial name: ")
cur.execute("select * from contacts where name like ?",
('%'+search+'%'))
Run Code Online (Sandbox Code Playgroud)
这会在那里的最后一行产生这个错误.
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied.
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的事情,这让我发疯.我开始认为如果不先将整个表读成字符串,这是不可能的.
我想我会尝试使我的sqlite数据库连接成为一个函数,而不是复制/粘贴连接和执行查询所需的~6行.我想让它变得多功能,所以我可以使用相同的功能来创建/选择/插入/等...
以下是我的尝试.'INSERT'和'CREATE TABLE'查询正在运行,但如果我执行'SELECT'查询,我如何处理它在函数外部获取的值?
通常我想打印它所取的值,也可以用它们做其他事情.
当我这样做时,我得到一个错误
Traceback (most recent call last):
File "C:\Users\steini\Desktop\py\database\test3.py", line 15, in <module>
for row in connection('testdb45.db', "select * from users"):
ProgrammingError: Cannot operate on a closed database.
Run Code Online (Sandbox Code Playgroud)
所以我猜连接需要打开,所以我可以从光标中获取值,但我需要关闭它,这样文件就不会总是被锁定.
这是我的测试代码:
import sqlite3
def connection (db, arg, cubby):
conn = sqlite3.connect(db)
conn.execute('pragma foreign_keys = on')
cur = conn.cursor()
cur.execute(arg)
for row in cur:
cubby.append(row)
conn.commit()
conn.close()
cubby=[]
connection('testdb.db', "create table users ('user', 'email')", cubby)
connection('testdb.db', "insert into users ('user', 'email') values ('joey', 'foo@bar')", cubby)
for row in connection('testdb45.db', …Run Code Online (Sandbox Code Playgroud) 我只是在python中搞乱线程,写了这个基本的IM东西[底部的代码]
我注意到,当我用Cc杀死程序时它不会退出,它只是永远挂起.
我只是猜测它正在等待每个线程完成他们正在做的事情,但因为它是一个永远不会发生的无限循环.
所以我想我需要手动杀死每个线程,或者在killsignal进来时结束循环.
我该怎么做?
#!/usr/bin/env python
import threading
import socket
class Listen(threading.Thread):
def run(self):
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.bind(('', 2727))
conn.listen(1)
while True:
channel, details = conn.accept()
print str(details)+": "+channel.recv(250)
channel.send("got it")
channel.close()
class Shout(threading.Thread):
def run(self):
while True:
try:
address = raw_input("who u talking to? ")
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect((address, 2727))
break
except:
print "can't connect to "+ str(address)
while True:
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect((address, 2727))
conn.send(raw_input())
conn.close()
listen = Listen().start()
shout = Shout().start()
Run Code Online (Sandbox Code Playgroud) 我的窗口中有一个tabcontrol,在每个tabitem中我想要一个不同的页面.
我可以通过在TabItem中创建一个Frame并在后面的代码中使用例如:
frame1.Content = new Pages.MyPage()
Run Code Online (Sandbox Code Playgroud)
我怎么能在XAML中做同样的事情?
这是故事.
我有一堆存储过程,并且都有自己的参数类型.
我想要做的是在python中创建一个类型安全层,这样我就可以在访问数据库之前确保所有值都是正确的类型.
当然我不想在python中再次编写整个模式,所以我想我可以通过从数据库中获取参数名称和类型来在启动时自动生成此信息.
所以我继续破解这个查询只是为了测试
SELECT proname, proargnames, proargtypes
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p
ON pronamespace = n.oid
WHERE nspname = 'public';
Run Code Online (Sandbox Code Playgroud)
然后我从python运行它,对于'proargtypes',我为每个结果得到一个这样的字符串
'1043 23 1043'
Run Code Online (Sandbox Code Playgroud)
我敏锐的眼睛告诉我这些是postgresql类型的oid,由空格分隔,这个特定的字符串意味着该函数接受varchar,integer,varchar.所以在python中说,这应该是
(unicode, int, unicode)
Run Code Online (Sandbox Code Playgroud)
现在我如何从这些数字中获取python类型?
理想的最终结果将是这样的
In [129]: get_python_type(23)
Out[129]: int
Run Code Online (Sandbox Code Playgroud)
我看了整个psycopg2,我发现最接近的是'extensions.string_types',但这只是将oids映射到sql类型名称.
你好
我在我的应用程序,它有7个文本框的形式.在窗体的构造函数中,我运行方法"MakeText()",将MySqlDataReader中的值插入到文本框中.
用户可以更改这些文本框中的值,当单击"提交"按钮时,它将在数据库上运行更新查询以写入所做的所有更改.
这一切都很好,但即使用户没有更改文本框中的任何文本,我发现查询数据库也浪费资源.
所以我需要一些方法来检查用户是否在加载表单后更改了文本框中的任何值.
我想在应用程序级别上执行此操作,而不是让数据库处理它.
我怎样才能做到这一点?
编辑:我只是想到了这个.也许我可以在表单加载时将所有值放入类字符串中,然后在运行查询之前检查它.有时你只需要在文字中加入一个问题来思考答案:D
无论如何,这是我能想到的最好的......
让我感到困扰的是,按下数据网格中的回车键会将选择项向下移动一个项目,我希望能够决定它在正常的keydown事件中做了什么.
所以我所做的是创建一个继承DataGrid并覆盖OnKeyDown事件并将其用作我的datagrid的新类.
这会产生一系列全新的问题,因为我显然必须重写所有其他按键(箭头键导航,shift +箭头键选择,pgup/pgdn等等).我一直在试图破解它,但是花费时间重写一些已经编写好的东西并且可能比我想出的更好.
那么如何在不弄乱datagrid的其他默认键绑定的情况下让enter键执行我想要的操作呢?
提前致谢
我不知道这叫什么,但我确定这是一个名字,它已经多次完成了.
我有一些文本框,理想情况下只允许特定的输入,如电话号码框,银行帐号和类似的东西.
例如,电话号码输入应采用以下格式:000-000-0000但我也希望它接受一个没有区号的数字,如:000-0000
现在我已经创建了一个从文本框派生的控件,它只接受数字输入,但我不知道如何在没有在TextChanged事件中做一些虚假黑客的情况下让破折号出现在正确的位置.
我知道这可能已经完成了死亡,我试图谷歌,但我没有正确的话.
我正在使用:
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,
0, "picturefile", 0)
Run Code Online (Sandbox Code Playgroud)
要改变壁纸.
但我想知道是否有任何简单的方法在每个屏幕上放置不同的壁纸.
虽然这个功能在Windows中不是标准功能,但是像ultramon这样的外部应用程序可以做到这一点.有谁知道它是如何工作的?
如果我将两个图像合并为一个然后制作壁纸,我认为它可能会起作用的方式,但是我仍然需要一种跨两个屏幕跨越一个图像的方法.
另外,我如何获取有关显示器设置,每个屏幕的分辨率及其位置的一些信息?就像你在windows中的gui显示设置中看到的那样,但是在数字中.
如果我只知道列表中任何元组的1个元素,我该如何搜索元组列表?
模型示例(这不起作用):
tuplelist = [('cat', 'dog'), ('hello', 'goodbye'), ('pretty', 'ugly')]
matchlist = []
searchstring = 'goodbye'
if (*, searchstring) in tuplelist:
print "match was found"
matchlist.append(tuplelist[#index of match])
Run Code Online (Sandbox Code Playgroud)
asterix将是我想放置通配符的地方
我知道我可以使用:
for i in range (len(tuplelist)):
if tuplelist[i][1]==searchstring:
matchlist.append(tuplelist[i])
print "match was found"
Run Code Online (Sandbox Code Playgroud)
但问题是如果找不到匹配项,我只需要运行一次特定的函数.
也许我可以制作一个在找到匹配时递增的计数器,并将这样的东西添加到循环中.
if i==len(tuplelist) and matchcounter==0:
#do something
print "no match was found"
Run Code Online (Sandbox Code Playgroud)
但是我认为那种丑陋和混乱,我确信有一些更清洁的方法可以做到这一点:P
我确定这是一个菜鸟问题.例如,假设我有一个看起来像这样的程序.
def method1():
#do something here
def method2():
#do something here
#this is the menu
menu=input("What would you like to do?\ntype 1 for method1 or 2 for method2: ")
if(menu=="1"):
method1()
if(menu=="2"):
method2()
Run Code Online (Sandbox Code Playgroud)
如何在方法完成而不是程序终止后再次显示此菜单?
我以为我可以将整个程序包装成无限循环,但这感觉不对:P
python ×7
c# ×4
wpf ×3
sqlite ×2
textbox ×2
database ×1
datagrid ×1
frame ×1
key-bindings ×1
list ×1
oop ×1
overriding ×1
postgresql ×1
psycopg2 ×1
tuples ×1
validation ×1
winapi ×1
window ×1
windows ×1