728x90
[Pandas] 데이터 프레임의 컬럼을 DB 테이블에 검색하기
테이블을 검색할 때, 조건을 데이터 프레임의 컬럼의 요소로 두고 싶었음
ex) 테이블 컬럼 A의 데이터가 데이터 프레임 컬럼 B의 데이터와 동일한 데이터를 검색
데이터
데이터베이스의 데이터
- test1
_id | name | age | grade |
+------+------+------+-------+
| 1000 | jon | 25 | A |
| 1001 | sara | 20 | B |
| 1002 | may | 23 | F |
| 1003 | jay | 21 | C |
데이터 프레임
- df
df = pd.DataFrame({
'ID' : [1000,1001,1002],
'NAME' : ['jon','sara','may']
})
ID NAME
0 1000 jon
1 1001 sara
2 1002 may
DB 연동
pymysql 사용
참고 : https://heywantodo.tistory.com/46
conn = pymysql.connect(
host = db_host,
user = db_user,
password= db_passwd,
port = 3306,
db = 'test_db',
charset='utf8'
)
테이블 검색
sql = "SELECT * FROM test1"
print(pd.read_sql_query(sql, conn))
_id name age grade
0 1000 jon 25 A
1 1001 sara 20 B
2 1002 may 23 F
3 1003 jay 21 C
조건 검색
df 컬럼을 조건으로 검색
- df의 name 컬럼의 첫번째 요소랑 동일한 테이블 검색
element = df['name'][0]
sql = f"SELECT * FROM test1 WHERE name like {element} "
print(pd.read_sql_query(sql, conn))
_id name age grade
0 1000 jon 25 A
컬럼 전체 요소를 검색
컬럼 전체 요소를 검색하려면 컬럼을 OR로 검색해야 함
- df의 name 컬럼 요소만큼 like 문을 생성
conditions = [f"name LIKE '%{value}%'" for value in df['NAME']]
- OR을 join
like_condition = ' OR '.join(conditions)
- 쿼리 확인
print(like_condition)
name LIKE '%jon%' OR name LIKE '%sara%' OR name LIKE '%may%'
- 쿼리 던지기
query = f"SELECT * FROM test1 WHERE {like_condition}"
print(pd.read_sql_query(query, conn))
_id name age grade
0 1000 jon 25 A
1 1001 sara 20 B
2 1002 may 23 F
👍 GOOD
반응형
'👩💻 Develope > Python' 카테고리의 다른 글
[Python] 데코레이터 (decorator) (0) | 2023.05.03 |
---|---|
[Pandas] 결측치 제거 & 교체 (0) | 2023.04.21 |
[Python] 리스트의 요소를 분리하기 (0) | 2023.04.13 |
[Python] Shell에 명령어 전달하기 (0) | 2023.04.12 |
[Python] 매개 변수와 람다(lambda) 표현식 (0) | 2023.04.10 |