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
[Python] 민감 정보 분리해서 사용하기 (config 파일 분리)
[Python] 민감 정보 분리하기 파이썬에서 데이터를 가져오거나 활용하려고 할 때, DB를 사용하는 경우가 많음 연동할 때 코드에 DB Host와 사용자의 Passwd를 적는 것이 불안하기도 했고, 매번 엔드포
heywantodo.tistory.com
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
728x90
반응형
'👩💻 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 |