我目前正在开发一个基本查询,根据输入参数插入数据,我无法执行它.
cur.execute("INSERT INTO foo (bar1, bar2) values (?, ?)", (foo1, foo2))
我有这个错误消息:
例外的Tkinter回调回溯(最近通话最后一个):
文件"/usr/lib/python3.2/tkinter/ 初始化的.py",线1426,在调用 返回self.func(*参数)文件"test.py",第9行,在寄存器cur.execute("INSERT INTO foo(bar1,bar2)"值(?,?)",(foo1,foo2))文件"/usr/local/lib/python3.2/dist-packages/pymysql /cursors.py",第108行,执行查询=查询%escaped_args TypeError:%支持的操作数类型:'bytes'和'tuple'
foo1和foo2都是字符串类型.我试过%s,同样的错误.
我有一个由字典组成的列表member,我正在这样插入一个数据库
# Executes query for each dictionary in member.
cursor.executemany("INSERT INTO `Citizens` (`Handle`,`Org`,`Role`, "
"`Rank`,`Visibility`,`Stars`,`Type`) VALUES "
"(%(handle)s,%(sid)s,%(roles)s,%(rank)s,"
"%(visibility)s,%(stars)s,%(type)s)", member)
# Commits changes to the database.
conn.commit()
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是当我开始遇到重复成员的问题时,我决定添加一个ON DUPLICATE条款.我们的想法是,如果一个成员是重复的,我们希望Org通过连接新数据来更新他的列.所以我把代码更改为了
# Executes query for each dictionary in member.
cursor.executemany("INSERT INTO `Citizens` (`Handle`,`Org`,`Role`, "
"`Rank`,`Visibility`,`Stars`,`Type`) VALUES "
"(%(handle)s,%(sid)s,%(roles)s,%(rank)s,"
"%(visibility)s,%(stars)s,%(type)s) ON DUPLICATE"
" KEY UPDATE `Org`=concat(ifnull(`Org`, \"\"), "
"\", \", %(sid)s);", member)
# Commits changes to the database.
conn.commit()
Run Code Online (Sandbox Code Playgroud)
但是,这样做我得到以下错误:
There was a problem inserting member(s): (1064, …Run Code Online (Sandbox Code Playgroud) 我想与pymysql一起使用在mysql脚本下运行。
START TRANSACTION;
BEGIN;
insert into ~~~
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我的python源代码是
connection = pymysql.connect(~~~~~~~)
with connection.cursor() as cursor :
connection.begin()
cursor.execute(~~.sql)
connection.commit()
connection.close()
Run Code Online (Sandbox Code Playgroud)
我的问题是“ connection.begin()”与“ START TRANSACTION; BEGIN;”相同。?我要使用“开始交易;开始;”
看标题,我需要通过PyMYSQL更新mysql数据库上的一些行,我想知道已经更改了多少行.
码:
import pymysql
db = pymysql.connect(xxxx)
cur = db.cursor()
sql = "update TABLE set A = 'abc' where B = 'def'"
cur.execute(sql, params)
db.commit()
我是 python pymysql 的新手(我在 Ruby 之前使用过 Mysql2 gem),我想从 mysql 表中获取键和值并执行一些操作:
例如:
dbconnection = pymysql.connect(host=mysql_hostname, user=mysql_username, password=mysql_pass, db=mysql_schema, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
cursor = dbconnection.cursor()
_SQL = ("""
select * ...
""")
cursor.execute(_SQL)
result = cursor.fetchall()
for row in result:
print(row)
print("\n")
# How can I access each key and each value for example: STATUS is the value and 3 is the key
# I want to do something like this:
#'if the value of 'CAP' > 1: change the value of status …Run Code Online (Sandbox Code Playgroud) 我正在对用于查询数据库的脚本进行故障排除。为了确保一切正常,我将其分解为一个简单的“SHOW TABLES”查询。问题是它返回的是表的计数,而不是它应该返回的名称列表。
import pymysql
connection = pymysql.connect(host='10.0.0.208', user='admin', passwd='Passwrd')
cursor = connection.cursor()
sqlstring = 'SHOW TABLES;'
cursor.execute('USE CustDB')
x = cursor.execute(sqlstring)
print(x)
Run Code Online (Sandbox Code Playgroud)
这仅返回“17”。我错过了什么??
我正在尝试使用 pymysql 远程连接到 MySQL,但收到错误消息:
(2003, "Can't connect to MySQL server on 'ip address' ([WinError 10061]
No connection could be made because the target machine actively refused it)")
Run Code Online (Sandbox Code Playgroud)
在我的 my.cnf 文件中,我将绑定地址设置为 0.0.0.0 并且跳过网络不存在。运行 "sudo netstat -atn" 显示端口 3306 仅在 localhost 上侦听:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
Run Code Online (Sandbox Code Playgroud)
我的防火墙允许来自 3306 的流量:
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/udp ALLOW Anywhere
80/udp ALLOW Anywhere
80/tcp ALLOW …Run Code Online (Sandbox Code Playgroud) cursor.execute(…)在执行之前多次执行有效的 PyMySQL 操作connection.commit(),还是connection.commit()需要在每个执行语句之后进行才能正确存储结果?这个想法是尽可能多地消除冗余语句,因为这个过程是长期运行的。
代码结构:
with connection.cursor() as cursor:
…
cursor.execute(SQLtype1, rowToInsert)
cursor.execute(SQLtype2, otherToInsert)
connection.commit() # does this account for both execute statements, or just the last?
Run Code Online (Sandbox Code Playgroud)
我已经审查了以下内容:
PyMySQL 执行/提交示例,但只有一个示例只有一个执行语句。
Python MySQLdb 示例,但有一个示例显示每个执行语句后的提交
Python SQLite 示例,显示提交前的多个执行语句,但不确定 SQLite 是否以不同方式处理
注意:由于 SQL 查询不同,executemany似乎不是一个选项。
我想在“事件”列中找到“概率:10%”或“10% 高”之类的内容,但是当我使用以下代码时:
conn = pymysql.connect(host="localhost", port=3306, user='myid', passwd='mypwd', db='mydb', charset='utf8')
curs = conn.cursor()
key = "%"
curs.execute(
"SELECT count(*) AS number FROM city WHERE events LIKE %s",
("%" + key + "%",)
)
Run Code Online (Sandbox Code Playgroud)
它返回表中的每一行。它执行了这个查询:
SELECT count(*) AS number FROM city WHERE events LIKE '%%%'
Run Code Online (Sandbox Code Playgroud)
像这样,我不是故意的。
搜索反斜杠符号也给了我错误的结果。
我应该怎么做才能得到正确的结果?
提前致谢。
我是一名 Discord 机器人开发人员,最近完成了一个订单。客户端在其服务器上设置应用程序时最初没有问题,但根据他们的说法,在运行“大约三个小时”后,程序开始吐出特定的堆栈跟踪错误并且不再接受命令。
该机器人使用 Discord.py 构建,并使用 Peewee 作为 ORM,使用 PyMySQL 作为数据库驱动程序。客户端运行它的服务器由 DigitalOcean 托管,如果需要有关硬件等的任何信息,客户端可以根据请求向我提供该信息。我们已经尝试卸载并重新安装所有依赖项,以及尝试它们的不同发行版,但错误仍然存在。
这是客户端正在接收的确切跟踪:
File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2666, in __exit__
reraise(new_type, new_type(*exc_args), traceback)
File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 179, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2875, in execute_sql
cursor.execute(sql, params or ())
File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 170, in execute
result = self._query(query)
File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 328, in _query
conn.query(q)
File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 516, in query
self._execute_command(COMMAND.COM_QUERY, sql)
File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 750, in _execute_command
raise err.InterfaceError("(0, '')")
peewee.InterfaceError: (0, '')
Run Code Online (Sandbox Code Playgroud)
我的 database.py 文件中的相关部分,其中打开了数据库连接: …