首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python中的list查询mysql多列

使用python中的list查询mysql多列
EN

Stack Overflow用户
提问于 2022-02-24 09:09:50
回答 2查看 512关注 0票数 1
代码语言:javascript
复制
q = f"""
SELECT * FROM table;
"""
df =  pd.read_sql(q, con=conn)

我在python [col1, col2, ... , coln]中存储了多个列

每当我想查询除少数列之外的所有列时,查询所有列然后删除是当前正在使用的方法。

我想知道是否在q中传递列的列表

代码语言:javascript
复制
q = f""" SELECT {column_list} FROM table"""

是有可能的。

这样做的原因是为了在jupyter笔记本中节省内存,只在笔记本中引入必要的列。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-24 09:13:20

可以根据列名列表创建CSV列列表:

代码语言:javascript
复制
col_list = ['col1', 'col2', 'col3']
cols = ', '.join(col_list)
q = f"""
SELECT {cols} FROM table;
"""
df =  pd.read_sql(q, con=conn)
print(q)  # SELECT col1, col2, col3 FROM table;
票数 1
EN

Stack Overflow用户

发布于 2022-02-24 09:17:38

编辑:不要这样做。见下文的评论。

当然,你能做到的。但是,不建议使用f-字符串(或某种自定义的格式化方式),原因之一是防止SQL注入攻击。首选的方法是使用数据库连接器使用的任何方法。

我以前使用过SQLite3,在它中我们做了这样的事情:

代码语言:javascript
复制
from sqlite3 import connect
connection = connect(path_to_db)
data = connection.execute("SELECT ?, ?, ? FROM table;", ("col1", "col2", "col3"))

问号将取代查询中的列名。该库有内置的保护措施,如果您使用这种方法,它将起作用。您还可以将它用于其他东西(如...WHERE name = ?;)。

阅读更多:https://realpython.com/prevent-python-sql-injection/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71249558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档