매개 변수가 있는 Pandas read_sql
Pandas에서 SQL 쿼리로 매개 변수를 전달하는 방법에 대한 예가 있습니까?
특히 SQLAlchemy 엔진을 사용하여 Postgre와 연결하고 있습니다.SQL 데이터베이스.지금까지 저는 다음과 같은 효과가 있다는 것을 알았습니다.
df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
'where "Timestamp" BETWEEN %s AND %s'),
db,params=[datetime(2014,6,24,16,0),datetime(2014,6,24,17,0)],
index_col=['Timestamp'])
팬더 문서에 의하면params명령어로도 전달할 수 있지만, 예를 들어 시도해본 결과 이를 작동시킬 수 없는 것 같습니다.
df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
'where "Timestamp" BETWEEN :dstart AND :dfinish'),
db,params={"dstart":datetime(2014,6,24,16,0),"dfinish":datetime(2014,6,24,17,0)},
index_col=['Timestamp'])
팬더에서 이러한 쿼리를 실행하는 데 권장되는 방법은 무엇입니까?
그read_sql의사들은 이것을 말합니다.params인수는 목록, 튜플 또는 dict가 될 수 있습니다(문서 참조).
sql 쿼리의 값을 전달하기 위해 다음과 같은 다양한 구문이 있습니다.?,:1,:name,%s,%(name)s(PEP249 참조).
그러나 모든 데이터베이스 드라이버가 이러한 모든 가능성을 지원하는 것은 아니며, 사용 중인 드라이버에 따라 구문이 지원됩니다(psycopg2자네의 경우에는.)
두 번째 경우에는 dict를 사용할 때 '이름이 지정된 인수'를 사용합니다.psycopg2문서화, 그들은 지원합니다.%(name)s스타일(따라서 그렇지 않음):name아마도), http://initd.org/psycopg/docs/usage.html#query-parameters 를 참조하십시오.
따라서 이러한 스타일을 사용하면 효과가 있습니다.
df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
'where "Timestamp" BETWEEN %(dstart)s AND %(dfinish)s'),
db,params={"dstart":datetime(2014,6,24,16,0),"dfinish":datetime(2014,6,24,17,0)},
index_col=['Timestamp'])
SQLite Table에서 읽을 때 많은 매개 변수를 전달하는 데 문제가 있었습니다.그리고 당신이 그에게 줄을 건네줬기 때문에 밝혀졌습니다.read_sql, 그냥 f-string을 사용하시면 됩니다.MSSQL pyodbc에서도 동일하게 시도해보았고 그것은 또한 작동합니다.
SQLite의 경우 다음과 같습니다.
# write a sample table into memory
from sqlalchemy import create_engine
df = pd.DataFrame({'Timestamp': pd.date_range('2020-01-17', '2020-04-24', 10), 'Value1': range(10)})
engine = create_engine('sqlite://', echo=False)
df.to_sql('MyTable', engine);
# query the table using a query
tpl = (1, 3, 5, 8, 9)
query = f"""SELECT Timestamp, Value1 FROM MyTable WHERE Value1 IN {tpl}"""
df = pd.read_sql(query, engine)
매개 변수가 datetime이면 좀 복잡하지만 사용 중인 SQL 방언의 datetime 변환 기능을 호출하면 됩니다.
start, end = '2020-01-01', '2020-04-01'
query = f"""SELECT Timestamp, Value1 FROM MyTable WHERE Timestamp BETWEEN STRFTIME("{start}") AND STRFTIME("{end}")"""
df = pd.read_sql(query, engine)
언급URL : https://stackoverflow.com/questions/24408557/pandas-read-sql-with-parameters
'programing' 카테고리의 다른 글
| 파이썬 - 아이언 파이썬 딜레마 (0) | 2023.09.16 |
|---|---|
| Oracle은 날짜에 '%'와 같이 사용 (0) | 2023.09.16 |
| C++ 및 C에서 Union 초기화 (0) | 2023.09.16 |
| 비슷한 단어는 어떻게 질의합니까? (0) | 2023.09.11 |
| 두 개의 열을 하나로 선택하는 방법은? (0) | 2023.09.11 |