我正在尝试执行查询以使用MySQL通过Python搜索数据库中的3个表.每次我尝试执行以下字符串作为查询时,它会给我一个关于字符串中连接的错误.
"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"
Run Code Online (Sandbox Code Playgroud)
这是它给我的错误:
ValueError: unsupported format character ''' (0x27) at index 1
Run Code Online (Sandbox Code Playgroud)
如果我删除它要求的字符,那么我还必须删除%,这会阻止查询实际正常工作.我能做些什么来解决这个问题,因为我对Python很陌生.
谢谢,克里斯
我目前正在使用MySQL和Python从网上抓取数据.具体来说,我正在抓取表数据并将其插入我的数据库.我当前的解决方案是有效的,但我觉得这是非常低效的,如果我不重写代码,很可能会锁定我的数据库.这是我目前使用的(部分代码):
itemBank = []
for row in rows:
itemBank.append((tempRow2,tempRow1,tempRow3,tempRow4)) #append data
#itemBank List of dictionaries representing data from each
row of the table. i.e.
('Item_Name':"Tomatoes",'Item_Price':"10",'Item_In_Stock':"10",'Item_Max':"30")
for item in itemBank:
tempDict1 = item[0]
tempDict2 = item[1]
tempDict3 = item[2]
tempDict4 = item[3]
q = """ INSERT IGNORE INTO
TABLE1
(
Item_Name,
Item_Price,
Item_In_Stock,
Item_Max,
Observation_Date
) VALUES (
"{0}",
"{1}",
"{2}",
"{3}",
"{4}"
)
""".format(tempDict1['Item_Name'],tempDict2['Item_Price'],tempDict3['Item_In_Stock'],
tempDict4['Item_Max'],getTimeExtra)
try:
x.execute(q)
conn.commit()
except:
conn.rollback()
Run Code Online (Sandbox Code Playgroud)
执行表的每一行都很麻烦.我尝试过使用executemany,但我似乎无法弄清楚如何正确访问字典的值.那么,executemany在给定数据结构的情况下,如何使用此处插入数据库?
在我安装Mariadb 10之后,Mysql工作台和JPDB客户端都连接并正常工作,所以下一步是用Python编程(使用SQLAlchemy),这似乎需要MySQL-python所以我去更新并得到:"mysql_config not found"I看着"通常的地方",没看到档案......
所以我按照之前关于SO的问题的一些想法 并尝试安装:apt-get install libmysqlclient-dev
让我去了:以下包有未满足的依赖:libmysqlclient-dev:取决于:libmysqlclient18(= 5.5.35-0ubuntu0.13.10.2)但是要安装10.0.10 + maria-1~saucy
哪种打砖墙适合我
总的来说,我对 Linux 和 VM 都很陌生。我目前正在尝试在干净的 Ubuntu Jammy 64 (22.4) vbox 实例上安装 mysqlclient。预先运行以下命令:
\n sudo add-apt-repository universe\n sudo apt-get install net-tools -y\n sudo apt-get install python3 -y\n sudo apt-get install python3-pip -y\n pip install pkgconfig\n sudo apt-get install pkg-config -y\nRun Code Online (Sandbox Code Playgroud)\n当我尝试运行时pip install mysqlclient出现以下错误:
vagrant@Ctrl-A-EES:~$ pip install mysqlclient\nDefaulting to user installation because normal site-packages is not writeable\nCollecting mysqlclient\n Using cached mysqlclient-2.2.0.tar.gz (89 kB)\n Installing build dependencies ... done\n Getting requirements to build wheel ... error\n error: subprocess-exited-with-error\n\n \xc3\x97 …Run Code Online (Sandbox Code Playgroud) 当您有一个连接对象时,是否可以为该单个连接创建多个游标并同时使用这些游标执行查询?或者每个光标是否等待前一个光标完成查询?
connection type: database=MySQLdb.connect(...)
cursor: curs=database.cursor()
querying: curs.execute("query")
Run Code Online (Sandbox Code Playgroud) 当我尝试在Fedora 14中的Python 2.6下安装MySQL-python-1.2.3时,我收到以下错误.
默认情况下Fedora 14附带Python 2.7,我正在使用Python 2.6运行的项目,所以我无法将Python从2.6升级到2.7.
_mysql.c:35:23: fatal error: my_config.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
完整的错误消息如下
[root@localhost MySQL-python-1.2.2]# python setup.py build
running build
running build_py
creating build
creating build/lib.linux-i686-2.6
copying _mysql_exceptions.py -> build/lib.linux-i686-2.6
creating build/lib.linux-i686-2.6/MySQLdb
copying MySQLdb/__init__.py -> build/lib.linux-i686-2.6/MySQLdb
copying MySQLdb/converters.py -> build/lib.linux-i686-2.6/MySQLdb
copying MySQLdb/connections.py -> build/lib.linux-i686-2.6/MySQLdb
copying MySQLdb/cursors.py -> build/lib.linux-i686-2.6/MySQLdb
copying MySQLdb/release.py -> build/lib.linux-i686-2.6/MySQLdb
copying MySQLdb/times.py -> build/lib.linux-i686-2.6/MySQLdb
creating build/lib.linux-i686-2.6/MySQLdb/constants
copying MySQLdb/constants/__init__.py -> build/lib.linux-i686-2.6/MySQLdb/constants
copying MySQLdb/constants/CR.py -> build/lib.linux-i686-2.6/MySQLdb/constants …Run Code Online (Sandbox Code Playgroud) MySQLdb Connections有一个基本的上下文管理器,可以在enter上创建一个游标,在退出时回退或提交,并且隐式不会抑制异常.来自连接源:
def __enter__(self):
if self.get_autocommit():
self.query("BEGIN")
return self.cursor()
def __exit__(self, exc, value, tb):
if exc:
self.rollback()
else:
self.commit()
Run Code Online (Sandbox Code Playgroud)
那么,有没有人知道为什么光标在退出时没有关闭?
起初,我认为这是因为关闭游标没有做任何事情,并且游标只有一个关闭方法来参考Python DB API(参见本答案的评论).但是,事实是关闭光标会烧掉剩余的结果集(如果有),并禁用光标.从光标源:
def close(self):
"""Close the cursor. No further queries will be possible."""
if not self.connection: return
while self.nextset(): pass
self.connection = None
Run Code Online (Sandbox Code Playgroud)
在退出处关闭光标会很容易,所以我不得不假设它没有故意完成.另一方面,我们可以看到,当一个游标被删除时,无论如何它都会被关闭,所以我猜垃圾收集器最终会绕过它.我对Python中的垃圾收集知之甚少.
def __del__(self):
self.close()
self.errorhandler = None
self._result = None
Run Code Online (Sandbox Code Playgroud)
另一个猜测是,您可能希望在with块之后重新使用光标.但我想不出你为什么需要这样做的任何理由.难道你不能总是在其上下文中使用游标,并且只为下一个事务使用单独的上下文吗?
要非常清楚,这个例子显然没有意义:
with conn as cursor:
cursor.execute(select_stmt)
rows = …Run Code Online (Sandbox Code Playgroud) 我在安装mysql-python时遇到问题.创建一个新的virtualenv,并在安装mysql-python时...这里是错误消息:
(env)$ pip install mysql-python
Collecting mysql-python
...
clang -bundle -undefined dynamic_lookup -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk build/temp.macosx-10.12-x86_64-2.7/_mysql.o -L/usr /local/Cellar/mysql/5.7.16/lib -lmysqlclient -lssl -lcrypto -o build/lib.macosx-10.12-x86_64-2.7/_mysql.so
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'clang' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
使用自制软件,我安装了:
已经尝试brew link但酿造拒绝这样做.
操作系统是MacOS Sierra.
有人可以帮忙吗?谢谢!
在Python中,mysqldb我可以将游标声明为字典光标,如下所示:
cursor = db.cursor(MySQLdb.cursors.DictCursor)
Run Code Online (Sandbox Code Playgroud)
这将使我能够cursor按名称引用循环中的列,如下所示:
for row in cursor: # Using the cursor as iterator
city = row["city"]
state = row["state"]
Run Code Online (Sandbox Code Playgroud)
是否可以使用此MySQL连接器创建字典光标? http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html
他们的例子只返回一个元组.
我想MySQL的创造者最终会为我们做这件事吗?
所以我的Windows 7笔记本电脑上安装了Python 2.7和setuptools.我还安装了Visual Studio 2008 Express和带有dev工具的MySQL.
我试图通过像pip安装mysql-python:
pip install mysql-python
Run Code Online (Sandbox Code Playgroud)
我收到链接错误:
Creating library build\temp.win32-2.7\Release\_mysql.lib and object build\temp.win32-2.7\Release\_mysql.exp
_mysql.obj : error LNK2019: unresolved external symbol _mysql_error@4 referenced in function __mysql_Exception
_mysql.obj : error LNK2019: unresolved external symbol _mysql_errno@4 referenced in function __mysql_Exception
_mysql.obj : error LNK2019: unresolved external symbol _mysql_server_init@12 referenced in function __mysql_server_init
_mysql.obj : error LNK2019: unresolved external symbol _mysql_server_end@0 referenced in function __mysql_server_end
_mysql.obj : error LNK2019: unresolved external symbol _mysql_thread_safe@0 referenced in function __mysql_thread_safe
_mysql.obj : error …Run Code Online (Sandbox Code Playgroud) mysql-python ×10
python ×8
mysql ×6
pip ×3
homebrew ×1
mariadb ×1
python-2.7 ×1
sqlalchemy ×1
ubuntu-22.04 ×1
virtualenv ×1